matlib解决几类规划问题(线性)

1.(整数规划)规划中的变量(部分或全部)限制为整数,主要用到bintprog函数和intlinprog函数。
1.1指派问题:
ex:

c=[3 8 2 10 3;8 7 2 9 7;6 4 2 7 5
8 4 2 3 5;9 10 6 9 10];
c=c(:);
a=zeros(10,25);
for i=1:5
a(i,(i-1)*5+1:5*i)=1;
a(5+i,i:5:25)=1;
end
b=ones(10,1);
[x,y]=bintprog(c,[],[],a,b);
x=reshape(x,[5,5]),y
显示为
x =

 0     0     0     0     1
 0     0     1     0     0
 0     1     0     0     0
 0     0     0     1     0
 1     0     0     0     0

1.2.intlinprog 函数,用于进行整数规划和整数非整数的混合规划。
使用形式如下:
x = intlinprog(f,intcon,A,b)
x = intlinprog(f,intcon,A,b,Aeq,beq)
x = intlinprog(f,intcon,A,b,Aeq,beq,lb,ub)
x = intlinprog(f,intcon,A,b,Aeq,beq,lb,ub,options)
x = intlinprog(problem)
[x,fval,exitflag,output] = intlinprog(_)
其中,f为规划目标,intcon为包含整数变量下标的向量。A、b为不等式约束条件,Aeq、Beq为等式约束条件,lb、ub为规划变量的上下限,有关其他几项参数的具体介绍可以在任意版本MATLAB中输入help linprog回车来查看,这里只介绍与linprog函数有所不同的intcon参数。
包含整数变量下标的向量,顾名思义,就是你的规划变量{x1,x2,x3,…,xn},其中哪一项是整数,intcon里就加上哪一项。如x2,x3是整数,intcon=[2 3],具体见帮助文档。
ex:

f=[300 450 0 950 300 300 0 200 0 1000];
ic_13=[1,2,3,4,5,6,7,8,9,10];
A=[-210 -300 0 -190 -220 -210 -170 -205 0 -200;
0 -85 0 -50 -70 0 -50 -40 0 0;
-50 -65 0 -45 -40 -40 0 -40 0 0;
-30 0 0 0 0 -30 0 0 0 -100;
0 0 0 0 0 -40 -40 0 0 0;
-30 0 0 0 0 -30 0 -45 0 0;
-20 0 0 0 0 0 -30 0 0 0];
b=[-636;-131;-64;-22;-80;-81;-50];
lb=zeros(10,1);
ub=ones(10,1);
[x,fval]= intlinprog(f,ic_13,A,b,[],[],lb,ub)
这个例子是说明intlinprog函数可以处理0-1整数规划,但他也可以处理整数规划问题。

2.(0-1规划)0− 型整数规划是整数规划中的特殊情形,它的变量的取值仅为 0 或 1。(具体情况见intlinprog函数)
3.(多目标规划)具体见fgoalattain函数,注意weight和power。我在做多目标的0-1规划时发现此函数并不行???
4.(线性规划)具体见linprog函数
总结:其实上述函数的形式是差不多的,读者要亲自试试即可!!

下面是补充的其他规划问题
5.(非线性规划)具体见fmincon函数
6.最大最小化问题见函数fminimax函数
目标函数的最大化和最小化问题,但是在某些情况下,则要求最大值的最小化才有意义。例如城市规划中需要确定急救中心、消防中心的位置,可取的目标函数应该是到所有地点最大距离的最小值,而不是到所有目的地的距离和为最小。

你可能感兴趣的:(数学建模)