本文写给对线性规划和约束满足问题的使用有困惑的朋友,如果你曾经在这方面存在一些疑问,这篇文章对你来说就再适合不过了,如果有对线性规划的解法感兴趣,那么也推荐你看一看我的思考~
*注:之前一直以为约束满足问题和线性规划问题是一样的,才发现其实不是这样的,仔细想想我之前的理解原来存在着那么大的误会。虽然也不能说他们完全不一样,因为基本上模型一样,具体的算法却是不一样的。为什么呢,因为这两类问题的目标不一样。约束满足问题,一般用于求解满足约束问题的所有解,所以使用搜索算法比较好,而线性规划或者整数规划问题,一般用于找出满足某个条件的最优解,一般使用单纯形法和分支定界法等。
约束满足问题
约束满足问题的定义:约束满足问题(CSP)是一类数学问题,它的定义为一组状态必须满足于若干约束或限制的对象(object)。 CSPs表示的是问题中的实体,有限数量、同类型的约束加之于变量之上, 这类问题通过 约束满足 方法解决。CSPs是人工智能和运筹学的热门主题, 这是因为它们公式中的规律提供了一个分析和解决很多不相关问题的共同基础。 CSPs通常表现出高复杂性, 需要结合启发式搜索 和联合搜索 方法来在合理的时间内解决问题。 —wiki
TSP旅行商问题在很长一段时间内的研究都被建模为约束满足问题,很多解法都是基于启发式搜索的。
CSPs的解决方案
确定域上的约束满足问题通常是利用搜索方法来解决的。 最常用的技术是回溯、约束传递,以及局部搜索的变种,这些算法也能很有效的解决则一类问题。
软件世界里是有很多用来解决约束满足问题的软件的,比如java库提供的开源choco引擎:
Choco is a Free Open-Source Java library dedicated to Constraint Programming.The user models its problem in a declarative way by stating the set of constraints that need to be satisfied in every solution.Then, the problem is solved by alternating constraint filtering algorithms with a search mechanism.
由上面的讲解可见choco的解题思路是基于搜索算法的。Choco是一个解决约束满足问题(CSP:Constraint Satisfaction Problems)的java库,用于解决约束规划。Choco的历史要追朔到1999年,一个叫做OCRE的项目,当时还是C+