线性规划和约束满足问题的思考

本文写给对线性规划和约束满足问题的使用有困惑的朋友,如果你曾经在这方面存在一些疑问,这篇文章对你来说就再适合不过了,如果有对线性规划的解法感兴趣,那么也推荐你看一看我的思考~
*注:之前一直以为约束满足问题线性规划问题是一样的,才发现其实不是这样的,仔细想想我之前的理解原来存在着那么大的误会。虽然也不能说他们完全不一样,因为基本上模型一样,具体的算法却是不一样的。为什么呢,因为这两类问题的目标不一样。约束满足问题,一般用于求解满足约束问题的所有解,所以使用搜索算法比较好,而线性规划或者整数规划问题,一般用于找出满足某个条件的最优解,一般使用单纯形法和分支定界法等。

约束满足问题

约束满足问题的定义:

约束满足问题(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+

  • 8
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Matlab可以使用`intlinprog`函数来解决非线性规划整数约束问题。`intlinprog`函数的使用方法如下: ```matlab [x,fval,exitflag,output] = intlinprog(f,intcon,A,b,Aeq,beq,lb,ub,options) ``` 其,`f`是目标函数的系数矩阵,`intcon`是整数决策变量的索引向量,`A`和`b`分别是线性不等式约束的系数矩阵和常数向量,`Aeq`和`beq`分别是线性等式约束的系数矩阵和常数向量,`lb`和`ub`分别是决策变量的下界和上界向量,`options`是求解器选项。 下面是一个简单的例子,演示如何使用`intlinprog`函数解决非线性规划整数约束问题: ```matlab % 目标函数系数矩阵 f = [-2; -3; -5]; % 不等式约束条件系数矩阵 A = [3 2 1; 2 5 3; 1 2 2]; b = [10; 15; 8]; % 整数决策变量的索引向量 intcon = [1; 2; 3]; % 求解器选项 options = optimoptions('intlinprog','Display','off'); % 求解问题 [x,fval,exitflag,output] = intlinprog(f,intcon,A,b,[],[],zeros(3,1),[],options); % 输出结果 fprintf('最小值: %f \n', fval); fprintf('x1: %d \n', x(1)); fprintf('x2: %d \n', x(2)); fprintf('x3: %d \n', x(3)); ``` 这里的例子,我们要求解的问题是: $$ \begin{aligned} \min_{x_1,x_2,x_3} \quad & -2x_1 - 3x_2 - 5x_3 \\ \text{s.t.} \quad & 3x_1 + 2x_2 + x_3 \leq 10 \\ & 2x_1 + 5x_2 + 3x_3 \leq 15 \\ & x_1 + 2x_2 + 2x_3 \leq 8 \\ & x_1,x_2,x_3 \in \mathbb{Z}^+ \\ \end{aligned} $$ 运行上面的Matlab代码,可以得到最小值和相应的决策变量取值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值