最详细!非线性整数规划模型(LINGO代码实现)

非线性整数规划模型LINGO

最详细!非线性整数规划模型(LINGO代码实现)_第1张图片

讲解分析:

第一步:确定决策变量

问题是确定调运方案,使得总运输费用最小。

而总运输费用=货物运量*货物单价,题目给了货物单价了,我们求货物运量即可,这里的货物运量则是我们的决策变量。

第二步:确定目标函数和约束条件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GEXUdKMb-1630571232120)(https://note.youdao.com/yws/public/resource/e8cbb6012bc3f5462b8a78019d0972ad/xmlnote/DDAEA06B69D14793A398098FE1419CC2/12)]

上图第一行就是我们的目标函数,下面三行是我们的约束条件,在满足约束条件的前提下,软件会不断遍历Xij所有可能的值,然后z也会根据Xij的变化而产生不同的值,这个时候用一个min函数取所有可能值当中的最小值,即可。

第三步:用LINGO代码实现

model:
title 最少运费问题;

sets:
!集合的定义,WH是集合的名字,W1..W6是集合的长度,一般写成1..6,相当于创建了一个能放六个元素的容器WH,是抽象的,是虚无的,是一种声明,告诉我们“:”后面的变量是一个什么类型的变量,显然,后面的AI是一个确确实实有六个数的数组,是具体的,是实在的。
WH/W1..W6/:AI;
!集合的名称、集合内的成员、集合的属性(可以看成是与改集合有关的变量或常量,相当与数组);
VD/V1..V8/:DJ;

links(WH,VD):C,X;
!以WH和VD为基础,衍生集合。相当于把两个向量结合在一起,形成一个二维数组,有行和列,C和X这两个变量是实在的具体的二维数组,只不过后面C我们赋值了,X是通过系统根据约束条件和目标函数自己赋值的;
endsets



data:
!数据段;
AI=60,55,51,43,41,52;
DJ=35,37,22,32,41,32,43,38;
C=6,2,6,7,4,2,5,9
  4,9,5,3,8,5,8,2
  5,2,1,9,7,4,3,3
  7,6,7,3,9,2,7,1
  2,3,9,5,7,2,6,5
  5,5,2,2,8,1,4,3;
enddata


min=@sum(links(I,J):c(i,j)*x(i,j)); !目标函数.links我们上线提到了,是一个6X8的集合名;
@for(WH(i):@sum(VD(j):x(i,j))<=AI(I));!约束条件.@for一出,你就要知道这一行写的就是约束条件了;
@for(vd(j):@sum(WH(i):x(i,j))=DJ(j));!约束条件.;

end

你可能感兴趣的:(数学建模,算法,matlab)