课本96页就是数学规划模型,写的很详细。
其中p111对分段线性函数的处理很巧妙。
(只有x1=500时,才能买x2, x2=500时才能买x3)
(x1-500)*x2=0 (x2-500)*x3=0
p102中 对分式扩大倍数时,对于影子价格分析时也得扩大相同倍数。
几个例子
@free(x1) ——free掉对x1>=0的限制
@gin(x1) 限制为整数变量
@bin(x1) 限制为0 1变量
@bnd(l,x,u) 表示 x为 [l,u]之间的实数
默认变量是非负实数
![](https://i-blog.csdnimg.cn/blog_migrate/125ae7f967a33f1dbdbcfb266c5ff494.png)
model:
sets:
supply/1..2/:s;
demand/1..3/:d;
link(supply,demand):road,g;
endsets
data:
road=10,5,6,4,8,12;
d=50,70,40;
s=60,100;
enddata
min=@sum(link(i,j):road(i,j)*g(i,j));
@for(demand(j):@sum(supply(i):g(i,j))=d(j));
@for(supply(i):@sum(demand(j):g(i,j))=s(i));
end
结构是@xxx(类型:…..)
![](https://i-blog.csdnimg.cn/blog_migrate/8ef6ea1e68cc96d9da38769b7461a7d4.png)
∑Xij=1 j=1...4 先来后面j的1...4再对xij的类型求和。
两个∑的时候即视为矩阵形式理解。(创建二维工厂)
目标函数中可以带有max min (最大最小化模型考虑)
通过for循环来约束x为01变量
model:
sets:
g/1..5/:a,x;
endsets
data:
a=1,2,3,4,5;
enddata
max=S;
@for(g(i):a(i)*x(i)=S);
@sum(g(i):x(i))=5000;
end
!sum=的值在外面 for在里面
0723更
model:
sets:
aaa/1..2/:x,y,e;
bbb/1..6/:d,a,b;
ccc(bbb,aaa):c;
endsets
data:
a=1.25 8.75 0.5 5.75 3 7.25;
b=1.25 0.75 4.75 5 6.5 7.75;
d=3 5 4 7 6 11;
x=5 2;
y=1 7;
e=20 20;
enddata
min=@sum(aaa(j):@sum(bbb(i):c(i,j)*@sqrt((x(j)-a(i))^2+(y(j)-b(i))^2)));
@for(bbb(i):@sum(aaa(j):c(i,j))=d(i));
@for(aaa(j):@sum(bbb(i):c(i,j))<=e(j));
end