本章重点论述了在1965年至1985年期间,作为人工智能和计算机科学领域新范式的约束语言,包含语言的满意度。 本手册的其余部分将更详细地介绍这里介绍的大部分内容,当然还有1986年至2006年。

2.1 The early days

约束满足以其基本形式涉及为一组问题变量中的每一个找到一个值,其中约束指定某些值的子集不能一起使用。 作为约束满足的一个简单例子,考虑选择组件部分的任务,这些组件可以是相互兼容的三轮车,车架,车轮,制动器,链轮和链条。

与大多数人工智能领域一样,约束满足可以被分为representation和reasoning两个方面。 前者可分为通用generic和特定应用application-specific型,后者可分为搜索search和推理inference。 虽然约束满足通常作为一种搜索形式,但它的真正重要性在于其广泛的代表性范围:它可以有效地用于模拟许多其他形式的推理(例如时间推理temporal reasoning)并应用于许多问题域(例如调度)。 由于这个原因,有时会在应用程序中遇到约束满足问题,但是,学术界已经多年来一直在研究这个问题:这是一本手册重要性的一个原因。此外,虽然启发式研究方法是一个主要关注点,但作为人工智能的一个分支,约束满足的区别特征可以说是强调推理,以约束传播的形式,而不是搜索。

约束满足问题已经被一系列令人眼花缭乱的方法所解决,从自动机理论到蚂蚁算法,并且是许多计算机科学领域和其他领域感兴趣的主题。 这些联系增加了主题的丰富性,但在很大程度上超出了本章的范围。 在这里,我们将重点关注将约束满足度作为人工智能分支的基本方法。 这个新的人工智能分支,以及我们只能在这里触及的编程语言和系统的相关工作,为1985年后对约束编程语言的兴趣奠定了基础。

约束满足当然是在1965年之前。我们现在认为是约束满足问题的现实世界问题,如劳动力调度,自然总是伴随着我们。八皇后问题,在人工智能中占据了很多早期约束满足感的问题,据说是由国际象棋选手马克斯·巴泽尔在1848年提出的。神话认为,一种形式的回溯搜索,一种强大的搜索范式,已成为约束满足的核心工具,被忒修斯在克里特岛的迷宫中使用。 Backtracksearch用于19世纪的休闲数学[51],并且是计算机科学和运筹学在第二次世界大战后作为学术学科出现的早期研究课题。 BitnerandReingold [2]认为Lehmer在1950年代首次使用了“回溯”一词[50]。在1960年代[16,15,34,75]的计算机科学文献中出现了各种形式的约束满足和传播。(八皇后问题,回溯的提出)

在人工智能中,对约束满足的兴趣在两个流中形成。 在某种意义上,两个流的共同祖先是伊万·萨瑟兰(Ivan Sutherland)1963年开创性的麻省理工学院博士学位。 论文,“画板:人机图形通信系统”[73]。

在一个流中,约束的多功能性导致应用程序在各种领域以及相关的编程语言和系统中。这个流我们可以调用语言流。 1964年,威尔克斯提出允许代数方程作为程序性Algol类编程语言中的约束语句,其中松弛用于满足约束[80]。大约在1967年,Elcock基于对等式约束的操纵开发了一种声明性语言Absys [22]。 Burstall早在1969年就采用了一种约束操作形式来解决密码算术难题[9]。在1970年的第一个社会智能研究中,Fikes描述了REF-ARF,其中REF语言构成了一个将约束满足和传播作为其方法之一的一般问题解决系统的一部分[23]。 Kowalski使用约束传播的形式进行定理证明[48]。麻省理工学院的Sussman和其他人将一种约束传播应用于电路的分析,综合和故障定位[6,17,18,67,71],而斯蒂尔的Sussman开发了CONSTRAINTS语言[72]。 Borning在他的ThingLab仿真实验室中使用了约束[4,5],其核心是Smalltalk语言的扩展; Lauriere在Alice中使用约束,这是一种解决组合问题的语言[49]。在规划领域,伊士曼用GSP进行“约束结构化”空间规划,通用空间规划师[21],Ste fi k在MOLGEN中使用“约束发布”,计划在分子遗传学中进行基因克隆实验[68,69]和Descotte和Latombe的GARI系统,它产生了机械零件的加工计划,嵌入了一个在“对抗约束”之间做出妥协的计划者[20]。 Fox,AllenandStrohm开发了ISIS-II [25]用于工厂车间调度的约束导向调度系统。

在另一个流中,对约束求解算法的兴趣源于机器视觉社区;我们引用一些早期的工作。我们将此流称为算法流。具有里程碑意义的'华尔兹滤波'(弧一致性)约束传播算法出现在博士学位。关于场景标签的论文[79],建立在霍夫曼[41]和Clowes [10]的工作基础之上。 Montanari开发了路径一致性,并在一篇题为“约束网络:图像处理的基本属性和应用”的开创性论文中建立了表示和推理约束的一般框架[60]。 Mackworth利用机器视觉约束[52],然后提供了“Consistencyinnetworks ofrelations”的年龄框架和弧与路径一致性的新算法[53]。在完成博士学位后不久,Freuder将弧和路径一致性推广到k-一致性[26]。关于“主动视野”的论文。 Barrow和Tenenbaum,MSYS [1]和IGS [74],也是图像解释约束的早期用户。 Rosenfeld,HummelandZucker,在“Scenelabelingbyrelaxationoperations”中,探讨了“连续标记问题”,其中约束不是“硬”,指出这些值可以或不能一起使用,而是“软”指定兼容程度[65]。哈拉克,戴维斯,罗森菲尔德和米尔格拉姆讨论了“减少操作以获得满意度”[38],哈拉克和夏皮罗在两篇关于“一致标签问题”的论文中概括了这些结果[36,37]。与J.R.Ullman一起,他们在[76]中讨论了用于约束传播和并行搜索计算的特殊硬件。

语言和算法流有分歧,两者都与特定的应用领域脱节。 虽然应用和商业开发确实激增,但学术界更多地关注一般方法。 虽然约束规划的一般性和科学性严谨性是其优势之一,但我们仍然面临着将这些流与其语义问题解决根源更加完全重新连接的持续挑战。

语言流受到逻辑编程的严重影响,以约束逻辑编程的形式出现,并专注于编程语言和库的开发。休伊特的Planner语言[40]及其作为MicroPlanner [70]的部分实现可以被视为早期的逻辑编程语言[3]。然而,主要的早期里程碑是Colmerauer和其他人在1972年左右开发的Prolog [14]以及编程语言运动的记录[39,47]。 Prologcanbeframedas使用单一算法作为约束求解器来解决编程语言,解决方案问题的变换(包括变量)。 Colmerauer在1982年对Prolog II的介绍中进一步推动了这一观点[13,12]。 Mackworth [53]提出了将约束传播算法集成到类似Planner的语言的解释器中。 Van Hentenryck开发并实现了CHIP(Prolog中的约束处理)作为一种全面的约束逻辑编程语言[77]。在并行开发中,Jaffar等人。开发了CLP(X)系列约束逻辑编程语言[42],包括CLP(R)[44]。有关语言流中这些发展的更多信息,请参阅本手册[11,43]和其他章节中的调查。

算法流受到人工智能作为搜索范式的影响,如Nilsson早期教科书[61]中的例证,以及算法科学的发展,如Knuth的计算机编程艺术[45]所示,侧重于算法(algorithms)和启发式(heuristic)。 第二股流更加完美地存在于人工智能中,发展成为围绕推理范式构建的人工智能社区之一:基于约束的推理[29],基于案例的推理等。 它还越来越多地关注简单但强大且一般的约束满足问题(CSP)公式及其变体。 在本章中,我们将主要关注这个流,以及CSP范例的发展。

然后,挑战变为将语言和算法流以及相关学科(例如数学规划和约束数据库)重新集成到单个约束编程社区中。 这个过程始于20世纪90年代,当时巴黎Kanellakis,Jean-Louis Lassez和Vijay Saraswat主持了一个研讨会,很快就形成了一年一度的约束规划原则和实践国际会议,并在Zs'的怂恿下 作为Ruttkay,Gene Freuder建立了Constraints期刊,该期刊“为许多对约束规划和约束满足和优化感兴趣的学科以及使用约束技术的许多应用领域提供了一个共同的论坛”。

Chapter 2 Constraint Satisfaction: An Emerging Paradigm相关推荐

  1. AI(人工智能:一种现代的方法)学习之:CSP(Constraint Satisfaction Problems) 约束满足问题:回溯法——前向检查(过滤法)、弧相容检查、 变量排序

    文章目录 参考 CSP 和传统的搜索算法的不同 地图着色问题 N-Queens 问题 为什么要用 CSP 来解决某些问题 回溯法 Filtering 过滤法 (forward checking) 弧相 ...

  2. OptaPlanner的新约束表达方式 Constraint Streams

    有好些时间没有写过关于OptaPlanner的东西了,其实近半年来,OptaPlanner还是推出了不少有用.好用的新特性.包括本文讲到的以Stream接口实现评分编程.关于OptraPlanner的 ...

  3. Optimal Trajectory Generation for Autonomous Vehicles Under Centripetal Acceleration Constraint [翻译]

    Optimal Trajectory Generation for Autonomous Vehicles Under Centripetal Acceleration Constraints for ...

  4. Stanford University courses of computer science department(斯坦福计算机系课程设置)

    斯坦福学科目前分为7个department:Business, Earth, Education, Engineering, Humanities & Sciences, Law, Medic ...

  5. 《97 Things Every Software Architect Should Know》读书笔记

    (从网上搜集的,并且整理为DOC文档,希望大家可以从这篇文章中学到更多的东西, 我准备将该文档翻译成中文,大家可以不定期的访问我的博客http://blog.csdn.net/jianglike18) ...

  6. A002-185-2537-翁格婉(个人期末作业)

    Excel查找结合项目主题说明 1.作业查词说明 1.1第一次查词 1.1.1Requirements baseline(需求基线) 1.1.2Enterprise Architect(企业架构师) ...

  7. 斯坦福大学计算机类课程视频

    斯坦福大学计算机类课程都是以CS开头编号,可以在网址https://exploredegrees.stanford.edu/coursedescriptions/cs/查询,在网上可以登录查看课程的课 ...

  8. Core Conference Ranking 2020 会议 排名 列表

    CORE (Computing Research & Education)Ranking会议排名是一种国际上较为认可的对计算领域会议的评估,排名由澳大利亚CORE执行委员会管理,定期对会议进行 ...

  9. github上可供新手阅读和玩耍的java项目有哪些??

    扫垃圾 ,Java 爱好者, 前沿技术思考者 刘巍然-学酥 等 217 人赞同 一个聊天程序范例: tinystruct2.0/smalltalk.java at master · m0ver/tin ...

最新文章

  1. Hibernate总结
  2. 分享Kali Linux 2017年第31周镜像文件
  3. 统计学习:基本常用公式(1)
  4. 死磕java并发cas_死磕 java并发包之AtomicInteger源码分析
  5. boost::tokenizer模块相关的测试程序
  6. lsattr/chattr
  7. hadoop 如何连beeline_关于hadoop:将日期函数设置为变量并在beeline和hql文件中使用(hive)...
  8. Nginx+Keepalived实现站点高可用
  9. mysql 跳过checksum_MySQL-Utilities:mysqldbcompare及跳过复制错误
  10. 常见的系统间接口方式(02)-中间件的数据接口模式
  11. PostgreSQL数据库——Pigsty
  12. Python WEB 开发,什么是 WSGI ?uWSGI、Gunincorn 都是啥玩意儿?
  13. MutationObserver监测qrcodejs2二维码生成失败
  14. 根据E-R图设计数据库表
  15. paramiko-简介
  16. X-Window结构分析与应用
  17. 什么是阻抗(Electrical impedance)
  18. 【笔记】WGAN GP :WGAN自己的李普西斯条件是gradient clipping(大部分weight是正负0.01),在此基础上增加新的motivation让WGAN GP实现李普西斯条件
  19. shp,sde,xmd的理解
  20. 在阿里云盘扩容过程中遇到的坑

热门文章

  1. 【附下载】手摸手带你搭建广告需求平台DSP
  2. HTTPS接口压测 --- hey工具
  3. 红米2联通4G版_标注:2014811_官方线刷包_救砖包_解账户锁
  4. python一些运维模块熟悉
  5. 汇编中的test和cmp指令[Z]
  6. 单片机传输信息到服务器,单片机传数据到云服务器
  7. (跨境电商)最新海关税率表(2019年1月1日实施)
  8. 【Win32多线程】异步I/O技术(Overlapped I/O),避免使用多线程
  9. NEO4J的安装配置及使用总结
  10. session和token鉴权