1.线性规划
在一组线性的约束条件的限制下,求一线性目标函数最大或最小的问题。
直接上函数: linprog(c,A,b)
形如[x,fval]=linprog(c,A,b,Aeq,beq,LB,UB,X0,OPTIONS)
c=[2;3;-5];
a=[-2,5,-1;1,3,1];
b=[-10;12];
aeq=[1,1,1];
beq=7;
x=linprog(-c,a,b,aeq,beq,zeros(3,1))
Optimal solution found.
x =
6.4286
0.5714
0
>> value=c'*x
value =
14.5714
对应着来写就可以了,只有一个点要说就是函数标准默认求的是最小值,如果求最大值只需把目标函数取负,like代码里的-c。
Lingo更简单一点:
max=2*x1+3*x2-5*x3;
x1+x2+x3=7;
2*x1-5*x2+x3>=10;
x1+3*x2+x3<=12;
x1>=0;
x2>=0;
x3>=0;
例:不例了,还是套公式,重点是怎么从实际问题抽象出模型,且行且珍惜吧。
2.整数规划
定义:规划中的变量(部分或全部)限制为整数时。
LINGO之。一个例子:
model:
sets:
row/1..4/:b;
col/1..5/:c1,c2,x;
link(row,col):a;
endsets
data:
c1=1,1,3,4,2;
c2=-8,-2,-3,-1,-2;
a=1 1 1 1 1
1 2 2 1 6
2 1 6 0 0
0 0 1 1 5;
b=400,800,200,200;
enddata
max=@sum(col:c1*x^2+c2*x);
@for(row(i):@sum(col(j):a(i,j)*x(j))<b(i));
@for(col:@gin(x));
@for(col:@bnd(0,x,99));
end
@gin是整数限定。但我不明白为啥写成这么复杂,简化之:
max=x1^2+x2^2+3*x3^2+4*x4^2+2*x5^2-8*x1-2*x2-3*x3-x