作业帮 > 数学 > 作业

lingo中规划求解运输问题.

来源:学生作业帮 编辑:搜搜考试网作业帮 分类:数学作业 时间:2024/05/14 17:27:02
lingo中规划求解运输问题.
已知有i个生产基地Fi,其中(i=1,2,……16)可供应m1、m2、m3、m4、m5、m6、m7、m8


共8种型号的电池,其供应量分别为ami,(m=1,2……,8;i=1,2,……16).有j个销地Sj,其中(j=1,2,……31),其需求量分别是bmj(j=1,2,……31).m种型号电池从产地Fi到销地Sj的单位运输物价(单价)为Cmij,若用Xmij表示m型号电池从Fi到Sj的运量,那么产销平衡的条件下,要求得总运费最小的调运方案.建立以下数学模型:

产量约束:某一产地运往各销地的运量之和等于该地产量;
销量约束:各产地运往某一销地的运量之和等于该地的需求量.
lingo中规划求解运输问题.
模型中的约束条件应该写错了:对于产量约束,应使第i个产地生产的第m种型号电池运往各销地的总和不大于该产地的供应量a_mi,不等式左边只须对j求和,共8×16个约束. 对于销量约束,应使各产地生产的第m种型号电池运往第j个销地的总和等于该销地的需求量b_mj,等式左边只须对i求和,共8×31个约束. 约束条件整理如下: 后面用lingo编写程序即可,但需给出供应矩阵A=(a_mi),需求矩阵B=(b_mj),单位运价矩阵C=(c_mij)的数值.
再问: 谢谢楼上的指正,这个问题是每个工厂的所有8个产品总和的产能极限,因此矩阵A只有16个数字为(2460 420 3090 450 270 600 900 2520 150 240 3030 1650
1500 750 0 120)
单位运价矩阵C有16个子矩阵
这里面的不同产品都已经折算过同一口径
能不能麻烦楼主帮我把集合的定义,目标函数和约束条件的lingo语言写出来啊?非常感谢!
再答: 先确定一下a_mi的定义:我这里是说的是第i个产地能够提供第m种型号电池的产能
因此A=(a_mi)是一个8×16的矩阵.
从你的说法看,只有第i个产地的产能总和?这样只有16个数据?
当然,先要把题目已知搞清楚,才能建模编程.方便的话最好提供一下原题.
再问: 已知有i个生产基地Fi,其中(i=1,2,……16)可供应共8种型号的电池,其总和供应量分别为ai,(i=1,2,……16)。有j个销地Sj,其中(j=1,2,……31),其需求量分别是bmj(j=1,2,……31)。m种型号电池从产地Fi到销地Sj的单位运输物价(单价)为Cmij
再答: 为配合lingo建立三维常数矩阵,这里将变量下标的顺序作一调整.其中,a_i与 b_j均为单下标变量  为方便我这里取i=1,2,3;m=1,2;j=1,2,3,4;a,b,c给定数值,见下列程序 model:  sets:    factory/1..3/:a;    battery/1..2/;    market/1..4/:b;    links(factory, battery, market):c,x;  endsets  data:    a=20 30 15;    b=15 25 10 5;    c=1 2 3 4    !按顺序输入C的子矩阵,这里有3个2*4矩阵;        5 6 7 8        4 3 2 1        8 7 6 5        6 7 8 9        5 4 3 2;  enddata  min=@sum(links(i,m,j):c(i,m,j)*x(i,m,j));   !目标函数;  @for(factory(i):@sum(links(i,m,j): x(i,m,j))<=a(i));   !产量约束;
  @for(market (j):@sum(links(i,m,j): x(i,m,j))=b(j));    !销量约束;end 得到的结果为x_111=15;x_112=5;x_212=20;x_213=5;x_214=5;x_323=5;其余均为零最小值为115,即1×15+2×5+3×20+2×5+1×5+3×5=115你将上述集合定义中的集合成员个数相应改动一下,并将a,b,c的数据代换即可
再问: 我上次说错了,我说的b是31个数据的。现在b是一个m行j列的矩阵,表示j个市场区域,对于不同型号的电池的一个需求情况。也就是8*31的一个矩阵,是不是模型中哪里需要改一下啊?
再答: 1.要增加新的集合links2,以便建立二维矩阵(b_mj),同时将b从market转移到该集合:
links2(battery, market):b;

2.b以矩阵形式赋值

3.销量约束也要相应变动(参考我最早写的)
@for(links2(m,j):@sum(links(i,m,j): x(i,m,j))=b(m,j));