1、下料问题
例:原材料根长5.5ABC种材料,分别为3.1m,2.1m,1.2m,数量分别为 100,200,400 根,试安排下料方式,使所需圆钢原材料的总数最少。
(1)
一根长5.5m的圆钢截出A,B,C三种材料的切解假设切割时没有损耗割方式有那些?
例如先截出 1A,余2.4m,可用作2C,则余0;若2.4m截出1B则余 0.3m;5.5m 截出4C,则余 0.7m;5.5m 截出2B+C,则余0.1m。所有可能的下料方式见下:
(2)LINGO
MIN=x1+x2+x3+x4+x5;
x1+x2>=100;
x1+2*x3+x4>=200;
2*x2+x3+2*x4+4*x5>=400;
2、配料问题
例:某营养师要为某个病人拟订本周蔬菜类菜单,当前可供选择的蔬菜品种、价格和营养成分含量,以及病人所需养分的最低数量见下表所示。病人每周需14份蔬菜,为了口味的原因,规定一周内的卷心菜不多于2份,胡萝卜不多于3份,其他蔬菜不多于4份且至少一份.。在满足要求的前提下,制订费用最少的一周菜单方案。
每份蔬菜所含养分数量 | |||||||
---|---|---|---|---|---|---|---|
蔬菜\养分 | 铁 | 磷 | 维生素A | 维生素C | 烟酸 | 每份价格 (元) |
|
A1 |
青豆 |
0.45 | 20 | 415 | 22 | 0.3 | 2.1 |
A2 |
胡萝卜 |
0.45 | 28 | 4065 | 5 | 0.35 | 1.0 |
A3 |
花菜 |
0.65 | 40 | 850 | 43 | 0.6 | 1.8 |
A4 |
卷心菜 |
0.4 | 25 | 75 | 27 | 0.2 | 1.2 |
A5 |
芹菜 | 0.5 | 26 | 76 | 48 | 0.4 | 2.0 |
A6 | 土豆 | 0.5 | 75 | 235 | 8 | 0.6 | 1.2 |
每周最低需求 | 6 | 125 | 12 500 | 345 | 5 |
MODEL:
SETS:
SHC/A1..A6/:AI,X;
YF/B1..B5/:BJ;
JIAGE(SHC,YF):C;
ENDSETS
DATA:
AI=2,1,1.8,1.2,2.0,1.2;
BJ=6,125,12500,345,5;
C=0.45,20,415,22,0.3,
0.45,28,4065,5,0.35,
0.65,40,850,43,0.6,
0.4,25,75,27,0.2,
0.5,26,76,48,0.4,
0.5,75,235,8,0.6;
ENDDATA
MIN=@SUM (SHC:AI*X);
@FOR(SHC(I): @GIN (X(I)) ) ;
@FOR(SHC(I): X(I)>=1);
@SUM(SHC(I): X(I))=14;
X(2)<=3;
X(4)<=2;
@FOR(SHC(I)|I #NE# 2 #AND# I #NE# 4: X(I)<= 4);
@FOR(YF(J): @SUM(SHC(I): X(I)*C(I, J))>=BJ(J));
END
3、选址问题
例:某公司有6个建筑工地要开工,工地的位置(xi,yi)(单位:km)和水泥日用量di(单位:t)由下表给出,公司目前有两个临时存放水泥的场地(简称料场),分别位于A(5,1)和B(2,7),日存储量各20t,请解决以下两个问题:
(1)假设从料场到工地之间均有直线道路相连,试制定日运输计划,即从A,B两个料场分别向各工地送多少水泥,使总的吨·千米数最小;
(2)为了进一步减少吨·千米数,打算舍弃目前的两个临时料场,改建两个新料场,日存储量仍然各为20t,则建在何处为优?
工地 | 1 | 2 | 3 | 4 | 5 | 6 | |
位置 | xi | 1.25 | 8.75 | 0.5 | 5.75 | 3 | 7.25 |
yi | 1.25 | 0.75 | 4.75 | 5 | 6.5 | 7.75 | |
日用量di | 3 | 5 | 4 | 7 | 6 | 11 |
(1)
第一步:先画出6个工地和2个临时料场的示意图
Matlab:
x=[1.25,0.5,3,1.25,4.75,6.5,5,2];
y=[8.75,5.75,7.25,0.75,5,7.75,1,7];
plot(x, y, 'o');
% 添加标签
labels = {'1', '2', '3', '4', '5','6','A','B'};
for i = 1:length(x)
text(x(i), y(i), labels{i}, 'HorizontalAlignment', 'left', 'VerticalAlignment', 'bottom');
end
xlabel('X轴'); % 设置坐标轴标签和标题
ylabel('Y轴');
grid on; % 显示网格
第二步:LINGO程序(线性规划模型,约束,最优解)
MODEL:
SETS:
gd/1..6/:x,y,d; !定义6个工地;
lch/A,B/:px,py,e; !定义2个料场;
links(gd,lch):C; !C为运量;
ENDSETS
DATA:
x=1.25 8.75 0.5 5.75 3 7.25;
y=1.25 0.75 4.75 5 6.5 7.75; !工地的位置;
d=3,5,4,7,6,11; !工地水泥需求量;
px=5,2; py=1,7; !料场位置;
e=20,20; !料场的日存储量;
ENDDATA
MIN=@SUM(links(i,j):C(i,j)*((px(j)-x(i))^2+(py(j)-y(i))^2)^(1/2));!目标函数是使总的吨·千米数最小;
@FOR(gd(i):@SUM(lch(j):C(i,j))=d(i)); !满足各工地的日需求量;
@FOR(1ch(j):@sum(gd(i):c(i,j))<=e(j)); !料场每天总运出量不超过存储量;
END
第三步:得最优方案如下:
工地 | 1 | 2 | 3 | 4 | 5 | 6 | 合计 | |
运量 | A | 3 | 5 | 0 | 7 | 0 | 0 | 16 |
B | 0 | 0 | 4 | 0 | 6 | 11 | 20 | |
合计 | 3 | 5 | 4 | 7 | 6 | 11 | 36 |
(2)修改LINGO程序
MODEL:
SETS:
gd/1..6/:x,y,d; !定义6个工地;
lch/A,B/:px,py,e; !定义2个料场;
links(gd,lch):C; !C为运量;
ENDSETS
DATA:
x=1.25 8.75 0.5 5.75 3 7.25;
y=1.25 0.75 4.75 5 6.5 7.75; !工地的位置;
d=3,5,4,7,6,11; !工地水泥需求量;
e=20,20; !料场的日存储量;
ENDDATA
MIN=@SUM(links(i,j):C(i,j)*((px(j)-x(i))^2+(py(j)-y(i))^2)^(1/2));!目标函数是使总的吨·千米数最小;
@FOR(gd(i):@SUM(lch(j):C(i,j))=d(i)); !满足各工地的日需求量;
@FOR(lch(j):@sum(gd(i):c(i,j))<=e(j));
END