lingo求解

lingo求解
lingo求解

Lingo超经典案例大全网址

https://www.360docs.net/doc/82923849.html,/view/2184e18ca58da0116d174904.html

lingo只能得出一个解

【1】

Extended solver steps

特殊求解程序当前运行步数:

分枝数(对B-and-B程序);

子问题数(对Global程序);

初始点数(对Multistart程序)

【2】

Total solver iterations

目前为止的迭代次数

【3】Row

对照lingo--generate--display中每行

【4】Slack or Surplus

各种原料的剩余

【5】Dual Price

影子价格

求改lingo程序,用sets:endsets

2012-08-15 08:55 _楓零|分类:其他编程语言|浏览207次

min=1020*2-(48.7*(x11+x12)+52.0*(x21+x22)+61.3*(x31+x32)+72.0*(x41+x4 2)+48.7*(x51+x52)+52.0*(x61+x62)+64.0*(x71+x72));

2*x11+3*x21+x31+0.5*x41+4*x51+2*x61+x71<=40;

2*x12+3*x22+x32+0.5*x42+4*x52+2*x62+x72<=40;

48.7*x11+52.0*x21+61.3*x31+72.0*x41+48.7*x51+52.0*x61+64.0*x71<=1020;

48.7*x12+52.0*x22+61.3*x32+72.0*x42+48.7*x52+52.0*x62+64.0*x72<=1020; x11+x12<=8;

x21+x22<=7;

x31+x32<=9;

x41+x42<=6;

x51+x52<=6;

x61+x62<=4;

x71+x72<=8;

48.7*x51+52.0*x61+64.0*x71<=302.7;

48.7*x52+52.0*x62+64.0*x72<=302.7;

x11>=0;x21>=0;x31>=0;x41>=0;x51>=0;x61>=0;x71>=0;

x12>=0;x22>=0;x32>=0;x42>=0;x52>=0;x62>=0;x72>=0;

@gin(x11);

@gin(x21);

@gin(x31);

@gin(x41);

@gin(x51);

@gin(x61);

@gin(x71);

@gin(x12);

@gin(x22);

@gin(x32);

@gin(x42);

@gin(x52);

@gin(x62);

@gin(x72);

end

sets:

r/1..7/:d1,d2,d3;

c/1..2/:;

link(r,c):x;

endsets

data:

d1= 48.7 52.0 61.3 72.0 48.7 52.0 64.0;

d2= 2 3 1 0.5 4 2 1;

d3= 8 7 9 6 6 4 8;

enddata

min=1020*2-@sum(link(i,j):d1(i)*x(i,j));

@for(c(j):@sum(r(i):d2(i)*x(i,j))<=40);

@for(c(j):@sum(r(i):d1(i)*x(i,j))<=1020);

@for(r:@sum(c:x)<=d3);

@for(c(j):@sum(r(i)|i#ge#5:d1(i)*x(i,j))<=302.7); @for(link:@gin(x));

end

在lingo中怎么输入数组

lingo用的是集没有数组的概念

首先需要在sets段定义集

sets:

setname/1..4/:x;

endsets

然后在data段写数据

data:

x=1 2 3 4;

enddata

LINGO中/M#EQ#N是什么意思

表示逻辑关系的#eq# 若两个运算数相等,则为true;否则为flase

同类的还有gt ge lt le ne这些gt就是greater than大于ge是greater than or equal to 表示大于等于类推lt le是小于和小于等于ne是not equal to 不等于常用在集合里面用来筛选集合中元素的指标

比如在循环里@for(s1(i)|i#gt#1:....)表示对集s1中指标大于1的进行循环

在集定义里面比如下面的表示一个由students和students得到的派生集里面第一个集中sex满足等于1 第二个满足sex等于2的元素的派生

linkmf(students,students)|sex(&1) #eq# 1 #and# sex(&2) #eq# 0:

friend;

Global optimal solution found.

Objective value: 3.050000

Extended solver steps: 0

Total solver iterations: 37

Variable Value Reduced Cost

U( 1) 3.000000 0.000000

U( 2) 0.000000 0.000000

U( 3) 1.000000 0.000000

U( 4) 2.000000 0.000000

D( 1, 1) 0.000000 0.000000

D( 1, 2) 0.4200000 0.000000

D( 1, 3) 0.9100000 0.000000

D( 1, 4) 1.290000 0.000000

D( 2, 1) 0.4200000 0.000000

D( 2, 2) 0.000000 0.000000

D( 2, 3) 0.5700000 0.000000

D( 3, 1) 0.9100000 0.000000 D( 3, 2) 0.5700000 0.000000 D( 3, 3) 0.000000 0.000000 D( 3, 4) 0.7700000 0.000000 D( 4, 1) 1.290000 0.000000 D( 4, 2) 1.160000 0.000000 D( 4, 3) 0.7700000 0.000000 D( 4, 4) 0.000000 0.000000 X( 1, 1) 0.000000 0.000000 X( 1, 2) 1.000000 0.4200000 X( 1, 3) 0.000000 0.9100000 X( 1, 4) 0.000000 1.290000 X( 2, 1) 0.000000 0.4200000 X( 2, 2) 0.000000 0.000000 X( 2, 3) 1.000000 0.5700000 X( 2, 4) 0.000000 1.160000 X( 3, 1) 0.000000 0.9100000 X( 3, 2) 0.000000 0.5700000 X( 3, 3) 0.000000 0.000000 X( 3, 4) 1.000000 0.7700000 X( 4, 1) 1.000000 1.290000 X( 4, 2) 0.000000 1.160000 X( 4, 3) 0.000000 0.7700000 X( 4, 4) 0.000000 0.000000

Row Slack or Surplus Dual Price

1 3.050000 -1.000000

2 0.000000 0.000000

3 0.000000 0.000000

4 0.000000 0.000000

5 0.000000 0.000000

6 0.000000 0.000000

7 0.000000 0.000000

8 0.000000 0.000000

9 0.000000 0.000000

10 6.000000 0.000000

11 0.000000 0.000000

12 5.000000 0.000000

13 5.000000 0.000000

14 2.000000 0.000000

15 0.000000 0.000000

16 0.000000 0.000000

17 1.000000 0.000000

LINGO1.1出错时错误代码含义

LINGO出错时错误代码含义:

在LINGO程序求解时,系统首先会对程序进行编译.系统在编译或执行其他命令时,会因程序中的错误或运行错误,弹出一个出错报告窗口,显示其错误代码,并简要指出错误的原因.这些错误报告信息能够提示用户发现程序中的错误,以便能尽快修改.下面我们给出出错信息的一个简要说明,仅供参考.

LINGO错误编号及原因对照表

错误代码含义

0 LINGO模型生成器的内存已经用尽(可用“LING O|Options"命令对General Solver

选项卡中的“Generator Memory Limit"选项进行内存大小的修改)

1 模型中的行数太多(对于有实际意义的模型,这个错误很少出现)

2 模型中的字符数太多(对于有实际意义的模型,这个错误很少出现)

3 模型中某行的字符数太多(每行不应该超过200个字符,否则应换行)

4 指定的行号超出了模型中实际具有的最大行号(这个错误通常在LOOK命令中指定

了非法的行号时出现)

5 当前内存中没有模型

6 脚本文件中TAKE命令的嵌套重数太多(LINGO中限定TAKE命令最多嵌套10次)

7 无法打开指定的文件(通常是指定的文件名拼写错误)

8 脚本文件中的错误太多,因此直接返回到命令模式(不再继续处理这个脚本文件)

9 (该错误编号目前没有使用)

10 (该错误编号目前没有使用)

11 模型中的语句出现了语法错误(不符合LINGO语法)

12 模型中的括号不匹配

13 在电子表格文件中找不到指定的单元范围名称

14 运算所需的,临时堆栈空间不够(这通常意味着模型中的表达式太长了)

15 找不到关系运算符(通常是丢了“<”,“=”或“>”)

16 输入输出时不同对象的大小不一样(使用集合循环方式输入输出时,集合大小应

相同)

17 集合元素的索引的内存堆栈空间不够

18 集合的内存堆栈空间不够

19 索引函数@INDEX使用不当

20 集合名使用不当

21 属性名使用不当

22 不等式或等式关系太多(例如,约束2

23 参数个数不符

24 集合名不合法

25 函数@WKX()的参数非法(注:在LING09.0中已经没有函数@WKX())

26 集合的索引变量的个数不符

27 在电子表格文件中指定的单元范围不连续

28 行名不合法

29 数据段或初始段的数据个数不符

30 链接到Excel时出现错误

31 使用@TEXT函数时参数不合法

32 使用了空的集合成员名

33 使用@OLET函数时参数不合法

34 用电子表格文件中指定的多个单元范围生成派生集合时,单元范围的大小应该一致

35 输出时用到了不可识别的变量名

36 基本集合的元素名不合法

37 集合名已经被使用过

38 ODBC服务返回了错误信息

39 派生集合的分量元素(下标)不再原来的父集合中

40 派生集合的索引元素的个数不符

41 定义派生集合时所使用的基本集合的个数太多(一般不会出现这个错误)

42 集合过滤条件的表达式中出现了取值不固定的变量

43 集合过滤条件的表达式运算出错

44 过滤条件的表达式没有结束(即没有“:”标志)

45 @ODBC函数的参数列表错误

46 文件名不合法

47 打开的文件太多

48 不能打开文件

49 读文件时发生错误

50 @FOR函数使用不合法

51 编译时LINGO模型生成器的内存不足

52 @IN函数使用不当

53 在电子表格文件中找不到指定的单元范围名称(似乎与出错代码“13”含义类似)

54 读取电子表格文件时出现错误

55 @TEXT函数不能打开文件

56 @TEXT函数读文件时发生错误

57 @TEXT函数读文件时出现了非法输入数据

58 @TEXT函数读文件时出现发现输入数据比实际所需要的少

59 @TEXT函数读文件时出现发现输入数据比实际所需要的多

60 用@TEXT函数输入数据时,没有指定文件名

61 行命令拼写错误

62 LINGO生成模型时工作内存不足

63 模型的定义不正确

64 @FOR函数嵌套太多

65 @WARN函数使用不当

66 警告:固定变量取值不唯一(例如:任意正数都是约束@SIGN(X)=l的解)

67 模型中非零系数过多导致内存耗尽

68 对字符串进行非法的算术运算

69 约束中的运算符非法

70 属性的下标越界

71 变量定界函数(@GIN,@BIN,@FREE,@BND)使用错误

72 不能从固定约束(只含有固定变量的约束)中求出固定变量的值(相当于方程无解

,或者LINGO的算法解不出来,如迭代求解算法不收敛)

73 在LINGO生成模型(对模型进行结构分析)时,用户中断了模型生成过程

74 变量越界,超出了1032

75 对变量的定界相互冲突(例如:一个模型中同时指定@BND(-6,X,6)和@BND(-5,X ,5)是允许的,但同时指定@BND(-6,X,6)和@BND(7,X,9)则是冲突的.)

76 LINGO生成模型时出现错误,不能将模型转交给优化求解程序

77 无定义的算术运算(例如除数为0)

78 (该错误编号目前没有使用)

79 (该错误编号目前没有使用)

80 生成LINGO模型时系统内存已经用尽

81 找不到可行解

82 最优值无界

83 (该错误编号目前没有使用)

84 模型中非零系数过多

85 表达式过于复杂导致堆栈溢出

86 算术运算错误(如1/0或@LOG(-1)等)

87 @IN函数使用不当(似乎与错误代码“52”相同)

88 当前内存中没有存放任何解

89 LINGO运行时出现了意想不到的错误(请与LINGO公司联系解决问题)

90 在LINGO生成模型时,用户中断了模型生成过程

91 当在数据段有“变量=?”语句时,LINGO运行中将要求用户输人这个变量的值,

如果这个值输入错误,将显示这个错误代码

92 警告:当前解可能不是可行的/最优的

93 命令行中的转换修饰词错误

94 (该错误编号目前没有使用)

95 模型求解完成前,用户中断了求解过程

96 (该错误编号目前没有使用)

97 用TAKE命令输入模型时,出现了不可识别的语法

98 用TAKE命令输入模型时,出现了语法错误

99 语法错误,缺少变量

100 语法错误,缺少常量

101 (该错误编号目前没有使用)

102 指定的输出变量名不存在

103 (该错误编号目前没有使用)

104 模型还没有被求解,或者模型是空的

105 (该错误编号目前没有使用)

106 行宽的最小最大值分别为68和200

107 函数@POINTER指定的索引值无效

108 模型的规模超出了当前LINGO版本的限制

109 达到了迭代上限,所以LINGO停止继续求解模型(迭代上限可以通过

“LING0|0ptions”命令对General Solver选项卡中的“Iteration”选项进行修改)

110 HIDE(隐藏)命令指定的密码超出了8个字符的限制

111 模型是隐藏的,所以当前命令不能使用

112 恢复隐藏模型时输入的密码错误

113 因为一行内容太长,导致LOOK或SAVE命令失败

114 HIDE(隐藏)命令指定的两次密码不一致,命令失败

115 参数列表过长

116 文件名(包括路径名)太长

117 无效的命令

118 命令不明确(例如,可能输入的是命令的缩写名,而这一缩写可有多个命令与之对应)

119 命令脚本文件中的错误太多,LINGO放弃对它继续处翠

120 LINGO无法将配置文件(LINGO.CNF)写入启动目录或工作目录(可能是权限问题) 121 整数规划没有敏感性分析

122 敏感性分析选项没有激活,敏感性分析不能进行(可通过“LINGO|Options”命令

对General Solver选项卡中的“Dual Computation”选项进行修改)

123 调试(Debug)命令只对线性模型、且模型不可行或无界时才能使用

124 对一个空集合的属性进行初始化

125 集合中没有元素

126 使用ODBC连接输出时,发现制定的输出变量名不存在

127 使用ODBC连接输出时,同时输出的变量的维数必须相同

128 使用SET命令时指定的参数索弓I无效

129 使用SET命令时指定的参数的取值无效

130 使用SET命令时指定的参数名无效

131 FREEZE命令无法保存配置文件LINGO.CNF(可能是权限问题)

132 LINGO读配置文件(LINGO.CNF)时发生错误

133 LINGO无法通过OLE连接电子表格文件(如:当其他人正在编辑这个文件时)

134 输出时出现错误,不能完成所有输出操作

135 求解时间超出了限制(可通过“LING0|0ptions”命令对General Solver选项卡中

的“Time”选项进行修改)

136 使用@TEXT函数输出时出现错误操作

137 (该错误编号目前没有使用)

138 DIVERT(输出重新定向)命令的嵌套次数太多(最多不能超过10次嵌套)

139 DIVERT(输出重新定向)命令不能打开指定文件

140 只求原始最优解时无法给出敏感性分析信息(可通过“LING0|0ptions”命令对General Solver选项卡中的“Dual Computation”选项进行修改)

141 对某行约束的敏感性分析无法进行,因为这一行已经是固定约束(即该约束中所有变量都已经在直接求解程序进行预处理时被固定下来了)

142 出现了意想不到的错误(请与LINDO公司联系解决这个问题)

143 使用接口函数输出时,同时输出的对象的维数必须相同

144 @POINTER函数的参数列表无效

145 @POINTER函数出错:2-输出变量无效;3-内存耗尽;4-只求原始最优解时无法给出敏感性分析信息;5-对固定行无法给出敏感性分析信息;6-意想不到的错误.

146 基本集合的元素名与模型中的变量名重名(当前版本的LINGO中这本来是允许的,但如果通过“LING0|0ptions”命令在“General Solver”选项卡选择“Check for

duplicates names in data a nd model”,则会检查重名,这主要是为了与以前的LINGO

版本兼容)

147 @WARN函数中的条件表达式中只能包含固定变量

148 @OLE函数在当前操作系统下不能使用(只在Windows操作系统下可以使用)

149 (该错误编号目前没有使用)

150 @ODBC函数在当前操作系统下不能使用(只在Windows操作系统下可以使用)

151 @POINTER函数在当前系统下不能使用(只在Windows操作系统下可以使用)

152 输入的命令在当前操作系统下不能使用

153 集合的初始化(定义元素)不能在初始段中进行,只能在集合段或数据段进行

154 集合名只能被定义一次

155 在数据段对集合进行初始化(定义元素)时,必须显示地列出所有元素,不能省略

元素

156 在数据段对集合和(或)变量进行初始化时,给出的参数个数不符

157 @INDEX函数引用的集合名不存在

158 当前函数需要集合的成员名作为参数

159 派生集合中的一个成员(分量)不是对应的父集合的成员

160 数据段中的一个语句不能对两个(或更多)的集合进行初始化(定义元素)

161 (该错误编号目前没有使用)

162 电子表格文件中指定的单元范围内存在不同类型的数据(即有字符,又有数值),LINGO无法通过这些单元同时输入(或输出)不同类型的数据

163 在初始段对变量进行初始化时,给出的参数个数不符

164 模型中输入的符号名不符合LINGO的命名规则

165 当前的输出函数不能按集合进行输出

166 不同长度的输出对象无法同时输出到表格型的文件(如数据库和文本文件)

167 在通过Excel进行输入输出时,一次指定了多个单元范围

168 @DUAL,@RANGEU,@RANGED函数不能对文本数据(如集合的成员名)使用,而只能

对变量和约束行使用

169 运行模型时才输入集合成员是不允许的

170 LINGO系统的密码输入错误,请重新输入

171 LINGO系统的密码输入错误,系统将以演示版方式运行

172 LINGO的内部求解程序发生了意想不到的错误(请与LINDO公司联系解决这个问题)

173 内部求解程序发生了数值计算方面的错误

174 LINGO预处理阶段(preprocessing)内存不足

175 系统的虚拟内存不足

176 LINGO后处理阶段(postprocessing)内存不足

177 为集合分配内存时出错(如内存不足等)

178 为集合分配内存时堆栈溢出

179 将MPS格式的模型文件转化成LINGO模型文件时出现错误(如变量名冲突等)

180 将MPS格式的模型文件转化成LINGO模型文件时,不能分配内存(通常是内存不足)

181 将MPS格式的模型文件转化成LINGO模型文件时,不能生成模型(通常是内存不足)

182 将MPS格式的模型文件转化成LINGO模型文件时出现错误(会给出出错的行号) 183 LINGO目前不支持MPS格式的二次规划模型文件

184 敏感性分析选项没有激活,敏感性分析不能进行(可通过“LINGO|Options”命令

对General Solver选项卡中的“Dual Computation”选项进行修改)

185 没有使用内点法的权限(LINGO中的内点法是选件,需要额外购买)

186 不能用@QRAND函数对集合进行初始化(定义元素)

187 用@QRAND函数对属性进行初始化时,一次只能对一个属性进行处理

188 用@QRAND函数对属性进行初始化时,只能对稠密集合对应的属性进行处理189 随机函数中指定的种子(SEED)无效

190 用隐式方法定义集合时,定义方式不正确

191 LINDOAPI返回了错误(请与LINDO公司联系解决这个问题)

192 LINGO不再支持@WKX函数,请改用@OLE函数

193 内存中没有当前模型的解(模型可能还没有求解,或者求解错误)

194 无法生成LINGO的内部环境变量(通常是因为内存不足)

195 写文件时出现错误(如磁盘空间不足)

196 无法为当前模型计算对偶解(这个错误非同寻常,欢迎你将这个模型提供给LINDO 公司进行进一步分析)

197 调试程序目前不能处理整数规划模型

198 当前二次规划模型不是凸的,不能使用内点法,请通过“LINGO[Options,’命

令取消对二次规划的判别

199 求解二次规划需要使用内点法,但您使用的LINGO版本没有这个权限(请通过“LINGO|Options”命令取消对二次规划的判别)

200 无法为当前模型计算对偶解,请通过“LINGO|Options”命令取消对对偶计算的

要求

201 模型是局部不可行的

202 全局优化时,模型中非线性变量的个数超出了全局优化求解程序的上限

203 无权使用全局优化求解程序

204 无权使用多初始点求解程序

205 模型中的数据不平衡(数量级差异太大)

206 “线性化”和“全局优化”两个选项不能同时存在

207 缺少左括号

208 @WRITEFOR函数只能在数据段出现

209 @WRITEFOR函数中不允许出现关系运算符

210 @WRITEFOR函数使用不当

211 输出操作中出现了算术运算错误

212 集合的下标越界

213 当前操作参数不应该是文本,但模型中指定的是文本

214 多次对同一个变量初始化

215 @DUAL,@RANGEU,@RANGED函数不能在此使用(参阅错误代码“168”)

216 这个函数应该需要输入文本作为参数

217 这个函数应该需要输入数值作为参数

218 这个函数应该需要输入行名或变量名作为参数

219 无法找到指定的行

220 没有定义的文本操作

221 @WRITE或@WRITEFOR函数的参数溢出

222 需要指定行名或变量名

223 向Excel文件中写数据时,动态接收单元超出了限制

224 向Excel文件中写数据时,需要写的数据的个数多于指定的接收单元的个数

225 计算段(CALC)的表达式不正确

226 不存在默认的电子表格文件,请为@OLE函数指定一个电子表格文件

227 为APISET命令指定的参数索引不正确

228 通过Excel输入输出数据时,如果LINGO中的多个对象对应于Excel中的名,则列数应该一致

229 为APISET命令指定的参数类型不正确

230 为APISET命令指定的参数值不正确

231 APISET命令无法完成

232 (该错误编号目前没有使用)

1000 (错误编号为1000以上的信息,只对Windows系统有效)

1001 LINGO找不到与指定括号匹配的括号

1002 当前内存中没有模型,不能求解

1003 LINGO现在正忙,不能马上响应您的请求

1004 LINGO不能写LOG(日志)文件,也许磁盘已满

1005 LINGO不能打开指定的LOG(日志)文件

1006 不能打开文件

1007 没有足够内存完成命令

1008 不能打开新窗口(可能内存不够)

1009 没有足够内存空间生成解答报告

1010 不能打开Excel文件的链接(通常是由于系统资源不足)

1011 LINGO不能完成对图形的请求

1012 LINGO与ODBC连接时出现错误

1013 通过OBDC传递数据时不能完成初始化

1014 向Excel文件传递数据时,指定的参数不够

1015 不能保存文件

1016 Windows环境下不支持Edit命令,请使用File|Open菜单命令

9999 由于出现严重错误,优化求解程序运行失败(最可能的原因是数学函数出错,如函数@LOG(X-1)当X<=1时就会出现这类错误)

运筹学实例分析及lingo求解

运筹学实例分析及lingo 求解 一、线性规划 某公司有6个仓库,库存货物总数分别为60、55、51、43、41、52,现有8个客户各要一批货,数量分别为35,37,22,32,41,32,43,38。各供货仓库到8个客户处的单位货物运输价见表 试确定各仓库到各客户处的货物调运数量,使总的运输费用最小。 解:设 ij x 表示从第i 个仓库到第j 个客户的货物运量。ij c 表示从第i 个仓库到第 j 个客户的单位货物运价,i a 表示第i 个仓库的最大供货量,j d 表示第j 个客户的订货量。 目标函数是使总运输费用最少,约束条件有三个:1、各仓库运出的货物总量不超过其库存数2、各客户收到的货物总量等于其订货数量3、非负约束 数学模型为: ∑∑===6 18 1)(min i j ij ij x c x f ????? ??????≥===≤∑∑==08,,2,1,6,2,1,,. .6 1 8 1ij j i ij i j ij x j d x i a x t s 编程如下: model : Sets : Wh/w1..w6/:ai;

Vd/v1..v8/:dj; links(wh,vd):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)); @for(wh(i):@sum(vd(j):x(i,j))<=ai(i)); @for(vd(j):@sum(wh(i):x(i,j))=dj(j)); end Global optimal solution found. Objective value: Total solver iterations: 0 Variable Value Reduced Cost AI( W1) AI( W2) AI( W3) AI( W4) AI( W5) AI( W6) DJ( V1) DJ( V2) DJ( V3) DJ( V4) DJ( V5) DJ( V6) DJ( V7) DJ( V8) C( W1, V1) C( W1, V2) C( W1, V3) C( W1, V4) C( W1, V5) C( W1, V6)

LINGO大规模规划求解

lingo 大规模规划求解 首先,让我们先看看一个非常简单的规划例子在LINGO软件中实现过程: 目标函数: 约束条件: 求解上面目标函数的最小值,我们在lingo中可编写如下代码:model: MIN=2*X1+X2-3*X3+5; X1+X2-3*X3<=10; X1-2*X2>=5 @GIN(X1);!整数约束; @GIN(X2); @GIN(X3); END 可以看出,LINGO语言和数学专业语言很接近,很容易表示约束条件和目标函数。可是对于规模很大的约束条件,难道我们也必须这样一条一条的输入吗,显然这样做是一件非常困难和繁琐的事,lingo语言又是如何表示约束条件规模巨大的规划问题呢,带着这样的疑问,让我们一步一步得看下面的内容: 一、集合域 在数学中集合的定义如下: 集合:具有某种相同属性的对象放在一起,就形成了一个集合, 集合中的每一个对象称作该集合的元素。 在大规模的优化问题中,集合是必然存在的,比如在平板车建模中,各种规格集装箱就可以看成一个集合,在货物配送问题中154个城市可以看成一个集合。在lingo语言中,将某些对象看成一个集合便可以很方便地对集合中的每一个元素进行统一处理。 集合域必须在模型的约束引用集合之前定义。

集合域用关键字“sets”开始,“endsets”结束。 集合分类: 基本集合定义统一语法格式: setname[/member-list/][:attribute-list]; 集合名/对象名1 对象名2 …对象名n/:对象属性; 集合定义的几种方法: sets row/1..20/:d1,d2,…dn; !集合名/对象名/:对象属性; end sets 派生集合定义方法: sets row/1..20/; col/1..100/; page/1..50/; link(row.col):k1,k2…kn; trd/(,t2,…tn; end sets K1可以表示某个省的某个城市的人口。 t1可以表示某个省的某个城市某个人的收入。 二、数据域: 数据域是优化问题中已知得对象的属性值,例如:人的身高,体重;车辆的载重,行驶速度。 数据域以关键字“data”开头,“enddata”结束。 数据域可以出现在模型中的任何地方。 data: d1=…; k1=…; t1=…; enddata 数据域的未知数值 有时只想为一个集的部分成员的某个属性指定值,而让其余成员的该属性保持未知,以便让LINGO去求出它们的最优值。在数据声明中输入两个相连的逗号表示该位置对应的集成员的属性值未知。两个逗号间可以有空格。 例3.8 sets:

Lingo与线性规划

Lingo 与线性规划 线性规划的标准形式是 Min z c 1 x 1 c n x n a 11 x 1 a 1n x n b 1 s..t a m1 x 1 a mn x n (1) b m x i 0, i 1,2, , n 其中 z c 1 x 1 c n x n 称为目标函数, 自变量 x i 称为决策变量 ,不等式组 (1)称为约 束条件 . 满足不等式组 (1)的所有 ( x 1, , x n ) 的集合称为可行域,在可行域里面使得z 取最小值的 ( x 1* , , x n * ) 称为最优解,最优解对应的函数值称为最优值。 求解优化模型的主要软件有 Lingo 、Matlab 、Excel 等。其中 Lingo 是一款专 业求解优化模型的软件, 有其他软件不可替代的方便功能。 本文将简要介绍其在线性规划领域的应用。 一、基本规定 1、目标函数输入格式 max=函数解析式; 或者 min= 函数解析式; 2、约束条件输入格式 利用: >、<、>=、<=等符号。但是 >与 >=没有区别。 Lingo 软件默认所以自变量都大于等于 0. 3、运算 加 (+), 减(-), 乘(*), 除(/), 乘方 (x^a) ,要注意乘号 (*) 不能省略。 4、变量名 不区分大小写字母,不超过 32 个字符,必须以字母开头。 5、标点符号 每个语句以分号“;”结束,感叹号“!”开始的是说明语句(说明语句也需要以分号“ ; ”结束)。但是,model ,sets ,data 以“:”结尾。endsets ,enddata , end 尾部不加任何符号。 6、命令不考虑先后次序 7、MODEL 语句 一般程序必须先输入 MODEL :表示开始输入模型,以“ END ”结束。对简单的模型,这两个语句也可以省略。 8、改变变量的取值范围 @bin(变量名 ) ; @bnd(a, 变量名 ,b ) ; @free( 变量名 ) ; @gin(变量名 ) ; 例 1 求目标函数 z 2x 1 限制该变量为 0 或 1. 限制该变量介于 a,b 之间 . 允许该变量为负数 . 限制该变量为整数 . 3x 2 的最小值,约束条件为

Lingo超经典案例大全

Lingo超经典案例大全 LINGO是Linear Interactive and General Optimizer的缩写,即“交互式的线性和通用优化求解器”。Lingo超强的优化计算能力在很多方面(线性规划、非线性规划、线性整数规划、非线性整数规划、非线性混合规划、二次规划等)比matlab、maple等强得多,Lingo编程简洁明了,数学模型不用做大的改动(或者不用改动)便可以直接采用Lingo语言编程,十分直观。 Lingo模型由4个段构成: (1)集合段(sets endsets);(2)数据段(data enddata); (3)初始段(init endinit);(4)目标与约束段。 Lingo的五大优点: 1. 对大规模数学规划,LINGO语言所建模型较简洁,语句不多; 2. 模型易于扩展,因为@FOR、@SUM等语句并没有指定循环或求和的上下限,如果在集合定义部分增加集合成员的个数,则循环或求和自然扩展,不需要改动目标函数和约束条件; 3. 数据初始化部分与其它部分语句分开,对同一模型用不同数据来计算时,只需改动数据部分即可,其它语句不变; 4. “集合”是LINGO有特色的概念,它把实际问题中的事物与数学变量及常量联系起来,是实际问题到数学量的抽象,它比C语言中的数组用途更为广泛。 5. 使用了集合以及@FOR、@SUM等集合操作函数以后可以用简洁的语句表达出常见的规划模型中的目标函数和约束条件,即使模型有大量决策变量和大量数据,组成模型的语句并不随之增加. 一、求解线性整数规划、非线性整数规划问题: 1.线性整数规划: model: max=x1+x2; x1+9/14*x2<=51/14; -2*x1+x2<=1/3; @gin(x1);@gin(x2); end

数学建模:运用Lindolingo软件求解线性规划

数学建模:运用Lindolingo软件求解线性规划 1、实验内容: 对下面是实际问题建立相应的数学模型,并用数学软件包Lindo/lingo对模型进行求解。 某厂生产甲乙两种口味的饮料,每百箱甲饮料需用原料6千克,工人10,可获利10万元;每百箱乙饮料需用原料5千克,工人20名,可获利9万元.名今工厂共有原料60千克,工人150名,又由于其他条件所限甲饮料产量不超过8百箱.问如何安排生产计划,即两种饮料各生产多少使获利最大.进一步讨论: 1)若投资0.8万元可增加原料1千克,问应否作这项投资. 2)若每百箱甲饮料获利可增加1万元,问应否改变生产计划. 数学建模论文 运用lindo/lingo软件求解线性规划 运用lindo/lingo软件求解线性规划 一、摘要 本文要解决的问题是如何安排生产计划,即两种饮料各生产多少使获利最大。 首先,对问题进行重述明确题目的中心思想,做出合理的假设,对符号做简要的说明。 然后,对问题进行分析,根据题目的要求,建立合适的数学模型。 最后,运用lindo/lingo软件求出题目的解。 【关键词】最优解 lindo/lingo软件 第二、问题的重述 某厂生产甲乙两种口味的饮料,每百箱甲饮料需用原料6千克,工人10名,可获利10万元;每百箱乙饮料需用原料5千克,工人20名,可获利9万元.今工厂共有原

料60千克,工人150名,又由于其他条件所限甲饮料产量不超过8百箱.问如何安排生产计划,即两种饮料各生产多少使获利最大.进一步讨论: 1)若投资0.8万元可增加原料1千克,问应否作这项投资。 2)若每百箱甲饮料获利可增加1万元,问应否改变生产计划。 第三、模型的基本假设 1、每一箱饮料消耗的人力、物力相同。 2、每个人的能力相等。 3、生产设备对生产没有影响。 第四、符号说明 1、x.....甲饮料 2、y.....乙饮料 3、z.....增加的原材料 第五、问题分析 根据题目要求:如何安排生产计划,即两种饮料各生产多少使获利最大,可知本题所求的是利润的最大值。我们可以先建立数学模型,然后用lindo/lingo软件包求解模型的最大值。 第六、模型的建立及求解根据题目建立如下3个模型: 模型1: max=0.1*x+0.09*y; 0.06*x+0.05*y<=60; 0.1*x+0.2*y<=150; x+y<=800; 结果:x=800;y=0;max=80 模型2:

Lingo与线性规划

Lingo 与线性规划 线性规划的标准形式是 1111111..0,1,2,,n n m mn n m i a x a x b s t a x a x b x i n +≤??? ? +≤??≥=?L M L L (1) 其中11n n z c x c x =++L 称为目标函数,自变量i x 称为决策变量,不等式组(1)称为约束条件. 满足不等式组(1)的所有1(,,)n x x L 的集合称为可行域,在可行域里面使得z 取最小值的** 1(,,)n x x L 称为最优解,最优解对应的函数值称为最优值。 求解优化模型的主要软件有Lingo 、Matlab 、Excel 等。其中Lingo 是一款专业求解优化模型的软件,有其他软件不可替代的方便功能。本文将简要介绍其在线性规划领域的应用。 一、基本规定 1、目标函数输入格式 max=函数解析式; 或者 min=函数解析式; 2、约束条件输入格式 利用:>、<、>=、<=等符号。但是>与>=没有区别。Lingo 软件默认所以自变量都大于等于0. 3、运算 加(+),减(-),乘(*),除(/),乘方(x^a),要注意乘号(*)不能省略。 4、变量名 不区分大小写字母,不超过32个字符,必须以字母开头。 5、标点符号 每个语句以分号“;”结束,感叹号“!”开始的是说明语句(说明语句也需要以分号“;”结束)。但是,model ,sets ,data 以“:”结尾。endsets ,enddata ,end 尾部不加任何符号。

6、命令不考虑先后次序 7、MODEL 语句 一般程序必须先输入MODEL :表示开始输入模型,以“END”结束。对简单的模型,这两个语句也可以省略。 8、改变变量的取值范围 @bin(变量名); 限制该变量为0或1. @bnd(a,变量名,b ); 限制该变量介于a,b 之间. @free(变量名); 允许该变量为负数. @gin(变量名); 限制该变量为整数. 例1 求目标函数1223z x x =+的最小值,约束条件为 输入Lingo 程序: min = 2*x1 + 3*x2; x1 + x2 >= 350; x1 >= 100; 2*x1 + x2 <= 600; 有两种运行方式: 1、点击工具条上的按钮 即可。 2、点击菜单:LINGO →Solve 运行结果如下: 下面对其各个部分进行说明: Global optimal solution found :表示已找到全局最优解。 Objective value :表示最优值的大小。可见本题函数最小值min z =800。 Infeasibilities :矛盾约束的数目。 Total solver iterations:迭代次数。 Variable :变量。本题有两个变量。

lingo解决线性规划问题的程序

Lingo12软件培训教案 Lingo 主要用于求解线性规划,整数规划,非线性规划,V10以上版本可编程。 例1 一个简单的线性规划问题 0 , 600 2 100 350 st. 3 2max >=<=+=<<=++=y x y x x y x y x z ! 源程序 max = 2*x+3*y; [st_1] x+y<350; [st_2] x<100; 2*x+y<600; !决策变量黙认为非负; <相当于<=; 大小写不区分 当规划问题的规模很大时,需要定义数组(或称为矩阵),以及下标集(set) 下面定义下标集和对应数组的三种方法,效果相同::r1 = r2 = r3, a = b = c. sets : r1/1..3/:a; r2 : b; r3 : c; link2(r1,r2): x; link3(r1,r2,r3): y; endsets data : ALPHA = ; a=11 12 13 ; r2 = 1..3; b = 11 12 13; c = 11 12 13; enddata

例2 运输问题 解: 设决策变量ij x = 第i 个发点到第j 个售点的运货量,i =1,2,…m; j =1,2,…n; 记为ij c =第i 个发点到第j 个售点的运输单价,i =1,2,…m; j =1,2,…n 记i s =第i 个发点的产量, i =1,2,…m; 记j d =第j 个售点的需求量, j =1,2,…n. 其中,m = 6; n = 8. 设目标函数为总成本,约束条件为(1)产量约束;(2)需求约束。 于是形成如下规划问题: n j m i x n j d x m i s x x c ij j n i ij i m j ij m i n j ij ij ,...,2,1,,...,2,1,0 ,...,2,1, ,...,2,1, st. z min 11 11==>=<==<==∑∑∑∑==== 把上述程序翻译成LINGO 语言,编制程序如下: ! 源程序

线性规划lingo实现示例

加工奶制品的生产计划 问题 品加工厂用牛奶生产1A ,2A 两种奶制品,1桶牛奶可以在设备甲用12小时加工成3公斤1A ,或者在设备乙上用8小时加工成4公斤2A 。根据市场需求,生产的1A ,2A 全部能售出,且每公斤1A 获利24元,每公斤2A 获利16元。现在加工厂每天能得到50桶牛奶的供应,每天正式工人总的劳动时间魏480小时,并且设备甲每天至多能加工100公斤1A ,设备乙的加工能力没有限制。试为该厂制订一个生产计划,使每天获利最大,并进一步讨论以下三个附加问题: 1) 若用35元可以买到1桶牛奶,应否作这项投资? 若投资,每天最多购买多少桶 牛奶? 2) 若可以聘用临时工人以增加劳动时间,付给临时工人的工资最多是每小时几元? 3) 由于市场需求变化,每公斤1A 的获利增加到30元,应否改变生产计划? 问题分析 这个优化问题的目标是使每天的获利最大,要作的决策是生产计划,即每天用多少桶牛奶生产1A ,用多少桶牛奶生产2A ,决策受到3个条件的限制:原料(牛奶)供应、劳动时间、设备甲的工作能力。按照题目所给,将决策变量、目标函数和约束条件用数学符号及式子表示出来,就得到下面的模型。 基本模型 决策变量:设每天用1x 桶牛奶生产1A ,用2x 桶牛奶生产2A 。 目标函数:设每天获利Z 元。1x 桶牛奶可生产31x 公斤1A ,获利1324x ?,2x 桶牛奶可生产42x 公斤2A ,获利2416x ?,故Z=216472x x +. 约束条件 原料供应:生产1A ,2A 的原料(牛奶)总量不得超过每天的供应,即1x +2x ≤50桶; 劳动时间:生产1A ,2A 的总加工时间不得超过每天正式工人总的劳动时间,即121x +82x ≤480小时; 设备能力:1A 的产量不得超过设备甲每天的加工能力,即31x ≤100; 非负:1x ,2x 均不能为负值,即1x ≥0,2x ≥0。 综上可得 Max Z=216472x x + (1) s.t. 1x +2x ≤50 (2)

Lingo与线性规划

Lingo与线性规划 线性规划得标准形式就是 (1) 其中称为目标函数,自变量称为决策变量,不等式组(1)称为约束条件、 满足不等式组(1)得所有得集合称为可行域,在可行域里面使得z取最小值得称为最优解,最优解对应得函数值称为最优值。 求解优化模型得主要软件有Lingo、Matlab、Excel等。其中Lingo 就是一款专业求解优化模型得软件,有其她软件不可替代得方便功能。本文将简要介绍其在线性规划领域得应用。 一、基本规定 1、目标函数输入格式 max=函数解析式; 或者min=函数解析式; 2、约束条件输入格式 利用:>、<、>=、<=等符号。但就是>与>=没有区别。Lingo软件默认所以自变量都大于等于0、 3、运算 加(+),减(-),乘(*),除(/),乘方(x^a),要注意乘号(*)不能省略。 4、变量名 不区分大小写字母,不超过32个字符,必须以字母开头。 5、标点符号 每个语句以分号“;”结束,感叹号“!”开始得就是说明语句(说明语句也需要以分号“;”结束)。但就是,model,sets,data以“:”结尾。endsets,e nddata,end尾部不加任何符号。 6、命令不考虑先后次序 7、MODEL语句 一般程序必须先输入MODEL:表示开始输入模型,以“END”结束。对简单

得模型,这两个语句也可以省略。 8、改变变量得取值范围 bin(变量名); 限制该变量为0或1、 bnd(a,变量名,b);限制该变量介于a,b之间、free(变量名);允许该变量为负数、 gin(变量名);限制该变量为整数、 例1 求目标函数得最小值,约束条件为 输入Lingo程序: min=2*x1 +3*x2; x1+ x2 >=350;?x1 >=100;?2*x1 +x2 <=600; 有两种运行方式: 1、点击工具条上得按钮即可。 2、点击菜单:LINGO→Solve 运行结果如下: 下面对其各个部分进行说明: Global optimalsolution found:表示已找到全局最优解。 Objective value:表示最优值得大小。可见本题函数最小值800。 Infeasibilities:矛盾约束得数目。

lingo建模入门--例题一

对于例题一: 某工厂在计划期内要安排生产Ⅰ、Ⅱ两种产品,已知生产单位产品所需的设备台时及A、B两种原材料的消耗,如表1-1所示: ⅠⅡ 设备128台时 原材料A4016kg 原材料B0412kg 利润2元3元 我们建立模型: 利用lingo求解时,可直接将模型输入,如在lingo中输入如下内容:!A sample linear program: MAX= 2 * x1 + 3 * x2; 4 * x1<= 16 ; 4 * x2<= 12 ; x1+ 2 * x2<= 8 ; 然后单机lingo菜单中的solve进行求解即可。 Lingo是一个设计用于建立和求解各种各样优化问题的数学建模语言,我们来看一下上面的模型: 第一行以惊叹号开始,以分号结束,是对模型的注释。 第二行给出了目标函数,显示了他是最大化的(注意:没有包含z变量),乘法用星号来表示,目标函数以分号结束。 下面的三行是约束函数,标点符号同一般的计算机语言,以分号结束。Lingo默认所有的变量为非负,若没有非负约束,需要用@free注明。

Lingo大小写不敏感,变量可以用大写或小写来表示。 Lingo窗口顶部的菜单条是一个标准的windows方式。一旦模型建立,即可从菜单或工具的solve按钮进行求解。在求解之前,lingo首先检查模型是否有语法错误,如果有,则提示错误位置。否则,求解工具开始求解,求解工具将在屏幕上出现一个求解状态窗口,当求解完成,求解报告将出现在屏幕上。 求解报告中,value列给出了决策变量的最优质。Slack or Surplus列的第一个输入显示了目标函数的响应值,下两个输入显示了每个约束函数两边之间的不同(对应于每个约束函数的剩余变量或松弛变量的值)。Reduced Cost和Dual Price列给出了问题的敏感性分析的信息。 这个模型足够小,能够一项一项写出,但这是单调乏味的。在一些相似的应用中,可能会有成千上万的决策变量和约束函数,一次以一项一项的方式写出模型是不现实的,lingo提供了一个有效地、紧凑的书写方式,即lingo建模语言。 LP模型一般具有重复的性质,所有的决策变量和约束函数都是同种类型的,lingo使用集合来描述这些重复的性质。 这个例子中的相关集合: 产品集合:P01,P02 资源集合:M01,M02,M03;(机器和原材料都可以看作是一种资源) 集合的属性: 1、每种产品的产量,每单位产品的利润 2、每周资源的供应量(包括原材料的供应量和设备的台时限制) 3、每单位每种产品分别需要资源的数量(产品和资源的组合的集合 成员的属性,这个集合源于两个简单的集合,称为导出集) 一个典型的lingo建立模型有三个部分: 1. 集合部分 2. 数据部分 3. 提供数学模型的部分 我们建立此模型的集合及数据部分: !lingo11 sets: !产品集合及其属性,/../之间的部分罗列了该集合的成员,每种属性会对应于集合的每个成员有一个值,相当于一个向量;

LINGO线性规划及其灵敏度分析

线性规划问题及灵敏度分析在LINGO软件中的实现 一、问题的提出: 某公司饲养实验用的动物以出售给动物研究所,已知这些动物的生长对饲料中3种营养成分(蛋白质、矿物质和维生素)特别敏感,每个动物每周至少需要蛋白质60g,矿物质3g,维生素8mg,该公司能买到5种不同的饲料,每种饲料1kg所含各种营养成分和成本如下表所示,如果每个小动物每周食用饲料不超过52kg,才能满足动物生长需要。 问题: 1.求使得总成本最低的饲料配方? 2.如果另一个动物研究对蛋白质的营养要求变为59单位,但是要求动物的价格比现在的价格便宜0.3元,问该养殖所值不值得接受? 3.由于市场因素的影响,X2的价格降为0.6元每千克,问是否要改变饲料配方? 二、建立线性规划数学模型 解答: (1)设需要饲料A1, A2, A3, A4分别为X1, X2, X3, X4kg,则建立线性规划数学模型如下: 目标函数:MinS=0.2X1+0.7X2+0.4X3+0.3X4+0.5X5 约束条件:0.3X1+2X2+X3+0.6X4+1.8X5>=60 0.1X1+0.05X2+0.02X3+0.2X4+0.05X5>=3 005X1+0.1X2+0.02X3+0.2X4+0.08X5>=8

X1+X2+X3+X4+X5<=52 X1, X2, X3, X4, X5>=0 三、在LINGO软件中的求解 在LINGO中输入下面的命令: Model: Min=0.2*x1+0.7*x2+0.4*x3+0.3*x4+0.5*x5; 0.3*x1+2*x2+x3+0.6*x4+1.8*x5>60; 0.1*x1+0.05*x2+0.02*x3+0.2*x4+0.05*x5>3; 0.05*x1+0.1*x2+0.02*x3+0.2*x4+0.08*x5>8; x1+x2+x3+x4+x5<52; end 操作:选菜单Lingo|Solve(或按Ctrl+S),或用鼠标点击“求解”按纽,如果模型有语法错误,则弹出一个标题为“LINGO Error Message”(错误信息)的窗口,指出在哪一行有怎样的错误,每一种错误都有一个编号(具体含义可查阅相关文献或LINGO的Help).改正错误以后再求解,如果语法通过,LINGO用内部所带的求解程序求出模型的解,然后弹出一个标题为“LINGO Solver Status”(求解状态)的窗口,其内容为变量个数、约束条件个数、优化状态、耗费内存、所花时间等信息,点击Close关闭窗口,屏幕上出现标题为“Solution Report”(解的报告)的信息窗口,显示优化计算(线性规划中换基迭代)的步数、优化后的目标函数值、列出各变量的计算结果. 输出结果如下: Global optimal solution found at iteration: 4 Objective value: 22.40000 Variable Value Reduced Cost X1 0.000000 0.7000000 X2 12.00000 0.000000 X3 0.000000 0.6166667 X4 30.00000 0.000000 X5 10.00000 0.000000

运筹学实例分析及lingo求解

. 运筹学实例分析及lingo 求解 一、线性规划 某公司有6个仓库,库存货物总数分别为60、55、51、43、41、52,现有8个客户各要一批货,数量分别为35,37,22,32,41,32,43,38。各供货仓库到8个客户处的单位货物运输价见表 试确定各仓库到各客户处的货物调运数量,使总的运输费用最小。 解:设 ij x 表示从第i 个仓库到第j 个客户的货物运量。ij c 表示从第i 个仓库到第 j 个客户的单位货物运价,i a 表示第i 个仓库的最大供货量,j d 表示第j 个客户的订货量。 目标函数是使总运输费用最少,约束条件有三个:1、各仓库运出的货物总量不超过其库存数2、各客户收到的货物总量等于其订货数量3、非负约束 数学模型为: ∑∑===6 18 1)(min i j ij ij x c x f ????? ??????≥===≤∑∑==08,,2,1,6,2,1,,. .6 1 8 1ij j i ij i j ij x j d x i a x t s ΛΛ

. 编程如下: model: Sets: Wh/w1..w6/:ai; Vd/v1..v8/:dj; links(wh,vd):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)); @for(wh(i):@sum(vd(j):x(i,j))<=ai(i)); @for(vd(j):@sum(wh(i):x(i,j))=dj(j)); end Global optimal solution found.

Lingo与线性规划

Lingo 与线性规划 线性规划的标准形式是 11n n Min z c x c x =++L 1111111..0,1,2,,n n m mn n m i a x a x b s t a x a x b x i n +≤??? ? +≤??≥=?L M L L (1) 其中11n n z c x c x =++L 称为目标函数,自变量i x 称为决策变量,不等式组(1)称为约束条件. 满足不等式组(1)的所有1(,,)n x x L 的集合称为可行域,在可行域里面使得z 取最小值的** 1(,,)n x x L 称为最优解,最优解对应的函数值称为最优值。 求解优化模型的主要软件有Lingo 、Matlab 、Excel 等。其中Lingo 是一款专业求解优化模型的软件,有其他软件不可替代的方便功能。本文将简要介绍其在线性规划领域的应用。 一、基本规定 1、目标函数输入格式 max=函数解析式; 或者 min=函数解析式; 2、约束条件输入格式 利用:>、<、>=、<=等符号。但是>与>=没有区别。Lingo 软件默认所以自变量都大于等于0. 3、运算 加(+),减(-),乘(*),除(/),乘方(x^a),要注意乘号(*)不能省略。 4、变量名 不区分大小写字母,不超过32个字符,必须以字母开头。 5、标点符号

每个语句以分号“;”结束,感叹号“!”开始的是说明语句(说明语句也需要以分号“;”结束)。但是,model ,sets ,data 以“:”结尾。endsets ,enddata ,end 尾部不加任何符号。 6、命令不考虑先后次序 7、MODEL 语句 一般程序必须先输入MODEL :表示开始输入模型,以“END”结束。对简单的模型,这两个语句也可以省略。 8、改变变量的取值范围 @bin(变量名); 限制该变量为0或1. @bnd(a,变量名,b ); 限制该变量介于a,b 之间. @free(变量名); 允许该变量为负数. @gin(变量名); 限制该变量为整数. 例1 求目标函数1223z x x =+的最小值,约束条件为 1211212..35010022600,0 s t x x x x x x x +≥??≥?? +≤??≥? 输入Lingo 程序: min = 2*x1 + 3*x2; x1 + x2 >= 350; x1 >= 100; 2*x1 + x2 <= 600; 有两种运行方式: 1、点击工具条上的按钮 即可。 2、点击菜单:LINGO →Solve 运行结果如下:

利用Lingo解一个具体的运输问题例子

实验三:利用Lingo 解一个具体的运输问题例子 1、 实验目的和任务 1.1. 进一步掌握Lingo 编程操作; 1.2通过实验进一步掌握运筹学运输问题的建模以及求解过程,提高学生分析问题和解决问题能力。 2、 实验仪器、设备及材料 计算机、Lingo 3、 实验内容 运输问题 问题P271 设有某种物资需要从m 个产地12,,...,m A A A 运到n 个销地12,,...,n B B B ,其中每个产地的生产量为 12,,...,m a a a ,每个销地的需求量为 12,,...,n b b b 。设从产地 i A 到销地 j B 的运费单价为 (1,2,...,, 1,2,..ij c i m j n ==,问如何调运可使总运费最少? 3个产地4个销地的运输问题 建模 决策变量:决策变量就是产地i A 到销地j B 的运量ij x 目标函数: 1 1 m in m n ij ij i j z c x === ∑∑, 约束条件:第i 个产地的运出量应小于或等于该地的生产量,即 1 ,1,2,...,.n ij i j x a i m =≤=∑ 第j 个销地的运入量应等于该地的需求量,即

1 ,1,2,....m ij j i x b j n ===∑ 求解过程 编写模型程序: model : ! 3 Warehouse,4 Customer Transportation Problem; sets : Warehouse/1..3/:a; Customer/1..4/:b; Routes(warehouse,customer):c,x; endsets !here are the parameters; data : a=30,25,21; b=15,17,22,12; c=6,2,6,7, 4,9,5,3, 8,8,1,5; enddata ! The objective; [obj] min =@sum (routes:c*x); !The supply constraints; @for (warehouse(i):[sup]@sum (customer(j):x(i,j))<=a(i)); !The demand constraints; @for (customer(j):[dem] @sum (warehouse(i):x(i,j))=b(j)); end 计算结果: Global optimal solution found. Objective value: 161.0000 Total solver iterations: 6 Variable Value Reduced Cost A( 1) 30.00000 0.000000 A( 2) 25.00000 0.000000 A( 3) 21.00000 0.000000 B( 1) 15.00000 0.000000 B( 2) 17.00000 0.000000 B( 3) 22.00000 0.000000

lingo-lindo简介

Lingo、lindo简介 一、软件概述 (1) 二、快速入门 (4) 三、Mathematica函数大全--运算符及特殊符号 (11) 参见网址: https://www.360docs.net/doc/82923849.html,/ 一、软件概述 (一)简介 LINGO软件是由美国LINDO系统公司研发的主要产品。LINGO是Linear Interactive and General Optimizer的缩写,即交互式的线性和通用优化求解器。LINGO可以用于求解非线性规划,也可以用于一些线性和非线性方程组的求解等,功能十分强大,是求解优化模型的最佳选择。其特色在于 内置建模语言,提供十几个内部函数,可以允许决策变量是整数(即整数规划,包括 0-1 整数规划),方便灵活,而且执行速度非常快。能方便与EXCEL,数据库等其他软件交换数据。 LINGO实际上还是最优化问题的一种建模语言,包括许多常用的函数可供使用者建立优化模型时调用,并提供与其他数据文件(如文本文件、Excel 电子表格文件、数据库文件等)的接口,易于方便地输入、求解和分析大规模最优化问题。 (二)LINGO的主要特点: Lingo 是使建立和求解线性、非线性和整数最佳化模型更快更简单更 有效率的综合工具。Lingo 提供强大的语言和快速的求解引擎来阐述和求 解最佳化模型。

1 简单的模型表示 LINGO 可以将线性、非线性和整数问题迅速得予以公式表示,并且容易阅读、了解和修改。LINGO的建模语言允许您使用汇总和下标变量以一种易懂的直观的方式来表达模型,非常类似您在使用纸和笔。模型更加容易构建,更容易理解,因此也更容易维护。 2 方便的数据输入和输出选择 LINGO 建立的模型可以直接从数据库或工作表获 取资料。同样地,LINGO 可以将求解结果直接输出到数据库或工作表。使得您能够在您选择的应用程序中生成报告。 3 强大的求解器 LINGO拥有一整套快速的,内建的求解器用来求解线性的,非线性的(球面&非球面的),二次的,二次约束的,和整数优化问题。您甚至不需要指定或启动特定的求解器,因为LINGO会读取您的方程式并自动选择合适的求解器。 4交互式模型或创建Turn-key应用程序 您能够在LINGO内创建和求解模型,或您能够从您自己编写的应用程序中直接调用LINGO。对于开发交互式模型,LINGO提供了一整套建模环境来构建,求解和分析您的模型。对于构建turn-key解决方案,LINGO提供的可调用的DLL 和OLE界面能够从用户自己写的程序中被调用。LINGO也能够从Excel宏或数据库应用程序中被直接调用。 5 广泛的文件和HELP功能

线性规划lingo实现示例

加工 问题 品加工厂用牛奶生产1A ,2A 两种奶制品,1桶牛奶可以在设备甲用12小时加工成3公斤1A ,或者在设备乙上用8小时加工成4公斤2A 。根据市场需求,生产的1A ,2A 全部能售出,且每公斤1A 获利24元,每公斤2A 获利16元。现在加工厂每天能得到50桶牛奶的供应,每天正式工人总的劳动时间魏480小时,并且设备甲每天至多能加工100公斤1A ,设备乙的加工能力没有限制。试为该厂制订一个生产计划,使每天获利最大,并进一步讨论以下三个附加问题: 1) 若用35元可以买到1桶牛奶,应否作这项投资? 若投资,每天最多购买多少桶 牛奶? 2) 若可以聘用临时工人以增加劳动时间,付给临时工人的工资最多是每小时几元? 3) 由于市场需求变化,每公斤1A 的获利增加到30元,应否改变生产计划? 问题分析 这个优化问题的目标是使每天的获利最大,要作的决策是生产计划,即每天用多少桶牛奶生产1A ,用多少桶牛奶生产2A ,决策受到3个条件的限制:原料(牛奶)供应、劳动时间、设备甲的工作能力。按照题目所给,将决策变量、目标函数和约束条件用数学符号及式子表示出来,就得到下面的模型。 基本模型 决策变量:设每天用1x 桶牛奶生产1A ,用2x 桶牛奶生产2A 。 目标函数:设每天获利Z 元。1x 桶牛奶可生产31x 公斤1A ,获利1324x ?,2x 桶牛奶可生产42x 公斤2A ,获利2416x ?,故Z=216472x x +. 约束条件 原料供应:生产1A ,2A 的原料(牛奶)总量不得超过每天的供应,即1x +2x ≤50桶; 劳动时间:生产1A ,2A 的总加工时间不得超过每天正式工人总的劳动时间,即121x +82x ≤480小时; 设备能力:1A 的产量不得超过设备甲每天的加工能力,即31x ≤100; 非负:1x ,2x 均不能为负值,即1x ≥0,2x ≥0。 综上可得 Max Z=216472x x + (1) s.t. 1x +2x ≤50 (2)

用LINGO求解线性规划的例子

附1:用LINGO求解线性规划的例子 一奶制品加工厂用牛奶生产A1、A2两种奶制品,1桶牛奶可以在设备甲上用12小时加工成3公斤A1,或者在设备乙上用8小时加工成4公斤A2。根据市场需求,生产的A1、A2能全部售出,且每公斤A1获利24元,每公斤A2获利16元。现在加工厂每天能得到50桶牛奶的供应,每天正式工人总的劳动时间为480小时,并且设备甲每天至多能加工100公斤A1,设备乙的加工能力没有限制。试为该厂制定一个生产计划,使每天获利最大,并进一步讨论以下3个附加问题: 1)若用35元可以购买到1桶牛奶,应否作这项投资?若投资,每天最多购买多少桶牛奶? 2)若可以聘用临时工人以增加劳动时间,付给临时工人的工资最多是每小时几元? 3)由于市场需求变化,每公斤A1的获利增加到30元,应否改变生产计划? 数学模型:设每天用x1桶牛奶生产A1 ,用x2桶牛奶生产A2 目标函数:设每天获利为z元。x1桶牛奶可生产3x1公斤A1,获利24*3x1,x2桶牛奶可生产4*x2公斤A2,获利16*4x2,故z=72x1+64x2 约束条件: 原料供应:生产A1、A2的原料(牛奶)总量不超过每天的供应50桶,即 x1+x2≤50 劳动时间:生产A1、A2的总加工时间不超过每天正式工人总的劳动时间480小时,即 12x1+8x2≤480 设备能力:A1的产量不得超过设备甲每天的加工能力100小时,即 3x1≤100 非负约束:x1、x2均不能为负值,即x1≥0,x2≥0 综上所述可得 max z=72x1+64x2 s.t. x1+x2≤50 12x1+8x2≤480 3x1≤100 x1≥0,x2≥0 显然,目标函数和约束条件都是线性的,这是一个线性规划(LP),求出的最优解将给出使净利润最大的生产计划,要讨论的问题需要考虑参数的变化对最优解和影响,一般称为敏感性(或灵敏度)分析。 LINGO求解线性规划 用LINGO求解线性规划时,首先在LINGO软件的模型窗口输入一个LP模型,模型以MAX或MIN 开始,按线性规划问题的自然形式输入(见下面例子所示)。 以下解加工奶制品的生产计划问题: 由于LINGO中已假设所有的变量都是非负的,所以非负约束条件不必输入;LINGO也不区分变量中的大小写字符(实际上任何小写字符将被转换为大写字符);约束条件中的“〈=”及“〉=”可用“〈”及

LINDO-LINGO简介及使用方法

欢迎访问华中数学建模网 https://www.360docs.net/doc/82923849.html, 1.LINDO、LINGO 一、软件简介 LINDO是一种专门用于求解数学规划问题的软件包。由于LINDO执行速度很快、易于方便输入、求解和分析数学规划问题。因此在数学、科研和工业界得到广泛应用。LINDO主要用于解线性规划、非线性规划、二次规划和整数规划等问题。也可以用于一些非线性和线性方程组的求解以及代数方程求根等。LINDO中包含了一种建模语言和许多常用的数学函数(包括大量概论函数),可供使用者建立规划问题时调用。 一般用LINDO(Linear Interactive and Discrete Optimizer)解决线性规划(LP—Linear Programming)。整数规划(IP—Integer Programming)问题。其中LINDO 6 .1 学生版至多可求解多达300个变量和150个约束的规划问题。其正式版(标准版)则可求解的变量和约束在1量级以上。 LINDO则用于求解非线性规划(NLP—NON—LINEAR PROGRAMMING)和二次规则(QP —QUARATIC PROGRAMING)其中LINGO 6.0学生版最多可版最多达300个变量和150个约束的规则问题,其标准版的求解能力亦再10^4量级以上。虽然LINDO 和LINGO不能直接求解目标规划问题,但用序贯式算法可分解成一个个LINDO和LINGO能解决的规划问题。 要学好用这两个软件最好的办法就是学习他们自带的HELP文件。 下面拟举数例以说明这两个软件的最基本用法。(例子均选自张莹《运筹学基础》) 例1.(选自《运筹学基础》P54.汽油混合问题,线性规划问题) 一种汽油的特性可用两个指标描述:其点火性用“辛烷数”描述,其挥发性用“蒸汽压力”描述。某炼油厂有四种标准汽油,设其标号分别为1,2,3,4,其特性及库存量列于下表1中,将上述标准汽油适量混合,可得两种飞机汽油,某标号为1,2,这两种飞机汽油的性能指标及产量需求列于表2中。 问应如何根据库存情况适量混合各种标准汽油,使既满足飞机汽油的性能指标,而产量又为最高。 表1 标准汽油辛烷数 蒸汽压力(g/cm^2) 库存量 1107.57.11*10^(-2)380000 293.011.38*10^(-2)262200 387.0 5.69*10^(-2)408100 4108.028.45*10^(-2)130100

相关文档
最新文档