您当前的位置:首页 > 电脑百科 > 人工智能

何时使用约束求解而不是机器学习

时间:2020-08-01 10:22:21  来源:  作者:
何时使用约束求解而不是机器学习

 

机器学习和深度学习一直是业界的热门话题。品牌领先于功能,导致深度学习在许多人工智能应用中被过度使用。

这篇文章将提供对约束求解的快速理解,这是一个强大但未被充分利用的方法,可以解决人工智能和其他计算机科学领域的大量问题,例如物流和调度时间推理和图形问题。

解决现实问题

让我们来考虑一个事实性的和高度话题性的问题。

病人人数正在上升。医院必须迅速组织起来治疗病人。

世界上需要一种算法,在疾病严重程度、患者年龄和位置、医院容量和设备等多个标准下,将感染者和医院匹配起来。

何时使用约束求解而不是机器学习

 

许多人会说,神经网络将是最适合它的:它可以有不同的配置,广泛的参数范围,可以根据需要减少到一个独特的解决方案。

然而,也有一些不利因素会破坏这个方案:

  • 模型需要训练,因此需要以前案例的历史数据,
  • 清理和整合数据集会浪费很多时间,
  • 各种体系结构都需要通过冗长的训练并且要进行测试。

另一方面,如果用一个布尔可满足性问题来描述,在不确定多项式时间(NP完全问题)中仍然给出次优解,并且不需要任何历史数据的情况下,不会有上述任何缺点。

这篇文章帮助你快速一览CSPs。理论和问题的表述将被忽略。有关更严格的方法,请参考论文,论文在文章的末尾

抽象问题

这篇文章将介绍约束编程,旨在解决这个案例。上面那张图说明了我们算法的输出,应该该算法将感染者与医院匹配。现有几个框架用于约束求解。google Optimization Tools(又称Tools)是一个用于解决组合优化问题的开源软件套件。我们的问题将使用Python中的这个框架进行建模。

from ortools.sat.python import cp_model

colab:https://colab.research.google.com/drive/1vFkt5yIQtyelqvCh2TsJ9UDeM5miXqui

参数

现在,让我们将问题简化为4个参数(1):

  • 感染者所在地
  • 感染者的严重程度
  • 医院位置
  • 每家医院的床位数

让我们用python定义这些参数:

# 医院数量
n_hospitals = 3
# 感染者人数
n_patients = 200
# 每家医院的床位数
n_beds_in_hospitals = [30,50,20]
# 病人位置,tuple (x,y)
patients_loc = [(randint(0, 100), randint(0, 100)) for _ in range(n_patients)]
# 医院位置,tuple (x,y)
hospitals_loc = [(randint(0, 100), randint(0, 100)) for _ in range(n_hospitals)]  
# 病人严重等级 1~5
patients_severity = [randint(1, 5) for _ in range(n_patients)]

变量

约束满足问题由一组变量组成,这些变量必须以满足一组约束。

  • 令I为医院的集合
  • 令$J_i$为医院i的床位集合
  • 令$K$为病人集合

定义变量的索引族:

何时使用约束求解而不是机器学习

 

如果在医院i中,床j由病人k取走,则$x_{ijk} = 1$。为了将医院的每一张床与一个病人联系起来,我们的目标是找到一组满足所有约束条件的变量。

我们可以将这些变量添加到模型中:

model = cp_model.CpModel()
x = {}
for i in range(n_hospitals):
  for j in range(n_beds_in_hospitals[i]):
    for k in range(n_patients):
      x[(i,j,k)] = model.NewBoolVar("x(%d,%d,%d)" % (i,j,k))

硬约束

硬约束定义了模型的目标。它们是必不可少的,如果它们得不到解决,就无法解决问题:

  • 每张床上最多只能有一个人
  • 每个人最多只能有一张床

让我们关注第一个硬约束。对于每家医院的每一张床,我:

  • 要么有一个唯一的病人k,
  • 要么床是空的。

因此,可以用以下方式表示:

何时使用约束求解而不是机器学习

 

我们的求解器是一个组合优化求解器,它只能处理整数约束。因此,必须转化为一个整数方程:

何时使用约束求解而不是机器学习

 

这个不等式可以加到我们的模型中。

# 每张床最多只能住一个人
for i in range(n_hospitals):
  for j in range(n_beds_in_hospitals[i]):
    model.Add(sum(x[(i,j,k)] for k in range(n_patients)) <= 1)

接下来,第二个硬约束:对于每个患者k:

  • 要么他在一个唯一的病床上j在一个唯一的医院i
  • 要么他在家。
何时使用约束求解而不是机器学习

 

同理,可以转化为一个整数不等式:

何时使用约束求解而不是机器学习

 

最后,可以将此约束添加到模型中。

# 每个人最多只能睡一张床
for k in range(n_patients):
  inner_sum = []
  for i in range(n_hospitals):
    inner_sum.Append(sum(x[(i,j,k)] for j in range(n_beds_in_hospitals[i]))) 
  model.Add(sum(inner_sum) <= 1)

软约束

接下来是软约束。这些都是非常需要的:我们的解决方案必须尽可能满足它们,但它们不是找到解决方案的必要条件:

  • 每个病人都应该躺在床上
  • 每个人都应该由最近的医院处理
  • 病床不足时,应先处理病情严重的病人

当硬约束被建模为等式或不等式时,软约束是最小化或最大化的表达式。

设Ω为满足硬约束的所有解的集合。

何时使用约束求解而不是机器学习

 

每一个病人都应该被安排在一张床上,这意味着最大限度地增加被占用的床的数量。

何时使用约束求解而不是机器学习

 

每个人都应该由最近的医院处理,以尽量减少每个病人与其指定医院之间的距离。

何时使用约束求解而不是机器学习

 

如果没有足够的床位,应首先处理病情严重的病人,以最大限度地提高所有处理病人的总严重程度。通过表示sev(k)患者k的严重程度:

何时使用约束求解而不是机器学习

 

然后我们可以将所有软约束简化为一个目标:

何时使用约束求解而不是机器学习

 

需要注意的是:这些软约束没有相同的定义域。

  • 患者最大化约束范围从0到n,其中n是患者数,
  • 病情严重性限制范围从0到5n
  • 距离约束范围从0到所有i和k的最大欧几里得距离。

考虑到所有这些约束具有相同的优先级,我们必须定义惩罚因子来平衡不同的约束。

下面是相应的代码:

# 整数的距离函数
idist = lambda xy1, xy2: int(((xy1[0]-xy2[0])**2 + (xy1[1]-xy2[1])**2)**0.5)

gain_max_patients = 140
gain_severity = int(140/5)
gain_distance = -1
#最大化的目标
soft_csts = []
for i in range(n_hospitals):
  for j in range(n_beds_in_hospitals[i]):
    for k in range(n_patients):
      factor = 
        gain_max_patients 
        + gain_distance * idist(hospitals_loc[i], patients_loc[k]) 
        + gain_severity * patients_severity[k]
      soft_csts.append(factor * x[(i,j,k)])
model.Maximize(sum(soft_csts))

求解

现在我们可以启动求解器了。它将试图在指定的时间限制内找到最优解。如果无法找到最优解,则返回最近的次优解。

solver = cp_model.CpSolver()
solver.parameters.max_time_in_seconds = 60.0
status = solver.Solve(model)

在我们的例子中,求解器在2.5秒内返回一个最优解。

何时使用约束求解而不是机器学习

 

结论

要创建这个解决方案,只需要1小时的研究和30分钟的编程。

如果使用深度学习,要进行几天的数据清理,至少一天测试不同的架构,另一天进行训练。

此外,如果模型良好,CP-SAT模型是非常健壮的。下面是不同模拟参数的结果。结果在许多不同的情况下仍然是一致的,随着模拟参数的增加(3000名患者,1000张病床),解决方案推断只需不到3分钟。

何时使用约束求解而不是机器学习

 

当然,csp几乎不适用于计算机视觉和NLP等主题,在这些主题中,深度学习有时是最好的方法。然而,在物流、调度和计划方面,这往往是可以实现的方法。

深度学习的炒作激发了一些人尝试一些疯狂的举动来获得认可。有时,最好还是通过阅读几篇关于你正在研究的问题的调查报告再想想你应该如何解决。

引用

[1] Jingchao Chen, Solving Rubik’s Cube Using SAT Solvers, arXiv:1105.1436, 2011.

[2] Biere, A., Heule, M., and van Maaren, H. Handbook of satisfiability, volume 185. IOS press, 2009a

[3] Knuth, D. E., The art of computer programming, Volume 4, Fascicle 6: Satisfiability. Addison-Wesley Professional, 2015

[4] Vipin Kumar, Algorithms for constraint-satisfaction problems: a survey, AI Magazine Volume 13, Issue 1, 1992.



Tags:机器学习   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
基于算法的业务或者说AI的应用在这几年发展得很快。但是,在实际应用的场景中,我们经常会遇到一些非常奇怪的偏差现象。例如,Facebook将黑人标记为灵长类动物、城市图像识别系统...【详细内容】
2021-11-08  Tags: 机器学习  点击:(32)  评论:(0)  加入收藏
这是几位机器学习权威专家汇总的725个机器学习术语表,非常全面了,值得收藏! 英文术语 中文翻译 0-1 Loss Function 0-1损失函数 Accept-Reject Samplin...【详细内容】
2021-10-21  Tags: 机器学习  点击:(43)  评论:(0)  加入收藏
要开始为开源项目做贡献,有一些先决条件:1. 学习一门编程语言:由于在开源贡献中你需要编写代码才能参与开发,你需要学习任意一门编程语言。根据项目的需要,在后期学习另一种语言...【详细内容】
2021-10-20  Tags: 机器学习  点击:(37)  评论:(0)  加入收藏
作者:阿米特&middot;V. 乔希(Ameet V Joshi)来源:华章科技 01 人工智能艾伦&middot;图灵(Alan Turing)对人工智能的定义如下:如果窗帘后面有一台机器,并且有人正在与之互动(无论以何...【详细内容】
2021-09-07  Tags: 机器学习  点击:(74)  评论:(0)  加入收藏
字节跳动基础架构团队基于火山引擎机器学习平台 Clever 及其丰富的行业落地经验,推出开源项目 Klever,以工程化的方式降低智能技术落地门槛,助力企业快速打造智能业务。作者: 陈...【详细内容】
2021-02-19  Tags: 机器学习  点击:(170)  评论:(0)  加入收藏
特征选择是识别和选择与目标变量最相关的输入变量子集的过程。特征选择最简单的情况可能是存在数字输入变量和用于回归预测建模的数字目标的情况。这是因为可以计算出每个输...【详细内容】
2021-01-15  Tags: 机器学习  点击:(117)  评论:(0)  加入收藏
1、集成学习及Boosting算法集成学习属于机器学习,它是一种“训练思路”,并不是某种具体的方法或者算法。集成学习的核心思想是把已有的算法进行结合,从而得到更好的效果。集成...【详细内容】
2020-12-29  Tags: 机器学习  点击:(176)  评论:(0)  加入收藏
“终有一天,人工智能会像我们看待非洲平原上低级生物的化石一样看待我们。在人工智能眼中,人类只是直立行走的猿猴,用着粗糙的语言和简陋的工具,从诞生起就注定会灭绝。”&mdash...【详细内容】
2020-12-17  Tags: 机器学习  点击:(147)  评论:(0)  加入收藏
专注Python、AI、大数据,请关注公众号七步编程!人工智能方向的项目,和数据可视化是紧密相连的。模型训练过程中梯度下降过程是什么样的?损失函数的走向如何?训练模型的准确度怎么...【详细内容】
2020-10-15  Tags: 机器学习  点击:(355)  评论:(0)  加入收藏
在数据领域,很多人都在说机器学习,但是只有很少的人能说清楚怎么回事。网上关于机器学习的文章,大多都是充斥各种定理的厚重学术三部曲(我搞定半个定理都够呛),或是关于人工智能...【详细内容】
2020-09-25  Tags: 机器学习  点击:(111)  评论:(0)  加入收藏
▌简易百科推荐
作为数据科学家或机器学习从业者,将可解释性集成到机器学习模型中可以帮助决策者和其他利益相关者有更多的可见性并可以让他们理解模型输出决策的解释。在本文中,我将介绍两个...【详细内容】
2021-12-17  deephub    Tags:AI   点击:(15)  评论:(0)  加入收藏
基于算法的业务或者说AI的应用在这几年发展得很快。但是,在实际应用的场景中,我们经常会遇到一些非常奇怪的偏差现象。例如,Facebook将黑人标记为灵长类动物、城市图像识别系统...【详细内容】
2021-11-08  数据学习DataLearner    Tags:机器学习   点击:(32)  评论:(0)  加入收藏
11月2日召开的世界顶尖科学家数字未来论坛上,2013年诺贝尔化学奖得主迈克尔·莱维特、2014年诺贝尔生理学或医学奖得主爱德华·莫索尔、2007年图灵奖得主约瑟夫·斯发斯基、1986年图灵奖得主约翰·霍普克罗夫特、2002...【详细内容】
2021-11-03  张淑贤  证券时报  Tags:人工智能   点击:(39)  评论:(0)  加入收藏
鉴于物联网设备广泛部署、5G快速无线技术闪亮登场,把计算、存储和分析放在靠近数据生成的地方来处理,让边缘计算有了用武之地。 边缘计算正在改变全球数百万个设备处理和传输...【详细内容】
2021-10-26    计算机世界  Tags:边缘计算   点击:(45)  评论:(0)  加入收藏
这是几位机器学习权威专家汇总的725个机器学习术语表,非常全面了,值得收藏! 英文术语 中文翻译 0-1 Loss Function 0-1损失函数 Accept-Reject Samplin...【详细内容】
2021-10-21  Python部落    Tags:机器学习   点击:(43)  评论:(0)  加入收藏
要开始为开源项目做贡献,有一些先决条件:1. 学习一门编程语言:由于在开源贡献中你需要编写代码才能参与开发,你需要学习任意一门编程语言。根据项目的需要,在后期学习另一种语言...【详细内容】
2021-10-20  TSINGSEE青犀视频    Tags:机器学习   点击:(37)  评论:(0)  加入收藏
SimpleAI.人工智能、机器学习、深度学习还是遥不可及?来这里看看吧~ 从基本的概念、原理、公式,到用生动形象的例子去理解,到动手做实验去感知,到著名案例的学习,到用所学来实现...【详细内容】
2021-10-19  憨昊昊    Tags:神经网络   点击:(47)  评论:(0)  加入收藏
语言是人类思维的基础,当计算机具备了处理自然语言的能力,才具有真正智能的想象。自然语言处理(Natural Language Processing, NLP)作为人工智能(Artificial Intelligence, AI)的核心技术之一,是用计算机来处理、理解以及运...【详细内容】
2021-10-11    36氪  Tags:NLP   点击:(48)  评论:(0)  加入收藏
边缘计算是什么?近年来,物联网设备数量呈线性增长趋势。根据艾瑞测算, 2020年,中国物联网设备的数量达74亿,预计2025年突破150亿个。同时,设备本身也变得越来越智能化,AI与互联网在...【详细内容】
2021-09-22  汉智兴科技    Tags:   点击:(54)  评论:(0)  加入收藏
说起人工智能,大家总把它和科幻电影中的机器人联系起来,而实际上这些科幻场景与现如今的人工智能没什么太大关系。人工智能确实跟人类大脑很相似,但它们的显著差异在于人工智能...【详细内容】
2021-09-17  异步社区    Tags:人工智能   点击:(57)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条