Friday, July 23, 2010

[zz]matlab求整数规划

最近碰到要求整数规划,在网上找到了一个非常好的matlab的工具箱—YALMIP,用他可以解决线性规划,非线性规划,整数规划,混合规划,强烈推荐把这个工具整合到matlab中去,这个工具是私人的,不过大家都可以免费下载使用。下载后,只要在matlab中添加路径就可以使用这工具箱。

正在吸引我的是,这个工具箱建立了一种新的数据类型,使所有规划问题都整合在一起。

举例如下:

已知非线性整数规划为:
Max z=x1^2+x2^2+3*x3^2+4*x4^2+2*x5^2-8*x1-2*x2-3*x3-x4-2*x5
s.t.
0<=xi<=99(i=1,2,...,5)
x1+x2+x3+x4+x5<=400
x1+2*x2+2*x3+x4+6*x5<=800
2*x1+x2+6*x3<=800

x3+x4+5*x5<=200

在matlab中输入 x=intvar(1,5);

f=[1 1 3 4 2]*(x'.^2)-[8 2 3 1 2]*x';F=set(0<=x<=99);

F=F+set([1 1 1 1 1]*x'<=400)+set([1 2 2 1 6]*x'<=800)+set(2*x(1)+x(2)+6*x(3)<=800);

F=F+set(x(3)+x(4)+5*x(5)<=200);solvesdp(F,-f)

double(f) 80199

double(x) 53 99 99 99 0

intvar(m,n):生成整数型变量;

sdpvar(m,n):生产变量;

solvesdp(F,f):求解最优解(最小值),其中F为约束条件(用set连接),f为目标函数

double:显示求解的答案

intvar,sdpvar,生成的变量可以像矩阵一样使用,如例题显示。

工具箱主页:http://control.ee.ethz.ch/~joloef/yalmip.php