LINGO:典型应用1(下料问题,配料问题,选址问题)

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。所有可能的下料方式见下:

LINGO:典型应用1(下料问题,配料问题,选址问题)_第1张图片

(2)LINGO

MIN=x1+x2+x3+x4+x5;
x1+x2>=100;
x1+2*x3+x4>=200;
2*x2+x3+2*x4+4*x5>=400;

LINGO:典型应用1(下料问题,配料问题,选址问题)_第2张图片

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

LINGO:典型应用1(下料问题,配料问题,选址问题)_第3张图片

LINGO:典型应用1(下料问题,配料问题,选址问题)_第4张图片

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:典型应用1(下料问题,配料问题,选址问题)_第5张图片

第二步: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

LINGO:典型应用1(下料问题,配料问题,选址问题)_第6张图片

第三步:得最优方案如下:

工地 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

LINGO:典型应用1(下料问题,配料问题,选址问题)_第7张图片

你可能感兴趣的:(数学建模,算法,学习,开发语言,matlab)