数学建模(11)——Lingo使用&数学规划
来源:互联网 发布:数据库开发工具青蛙 编辑:程序博客网 时间:2024/05/08 07:27
Lingo 程序比较简单,适用于解决数学规划模型
注意事项
- Lingo中默认所有的变量都是非负的,在程序中不需要写出相应的约束
- 使用集合的方式定义向量,必须先定义,而标量不需要定义,直接使用即可
- 三个要素条件:目标函数、决策变量、约束条件
- 一个语句可以分几行输入,但必须使用英文分号结束
- 注释使用!开始,英文分号结束
- 变量不区分大小写
- 所有函数以@开头
函数与运算符
Lingo具有9种逻辑运算符
‘#not#’ 否定该操作数的逻辑值,’#not#’是一个一元运算符。
‘#eq# ’ 若两个运算数相等,则为 true;否则为 false。
‘#ne#’ 若两个运算符不相等,则为 true;否则为 false。
‘#gt#’ 若左边的运算符严格大于右边的运算符,则为 true;否则为 false。
‘#ge#’ 若左边的运算符大于或等于右边的运算符,则为 true;否则为 false。
‘#lt#’ 若左边的运算符严格小于右边的运算符,则为 true;否则为 false。
‘#le#’ 若左边的运算符小于或等于右边的运算符,则为 true;否则为 false。
‘#and# ’ 仅当两个参数都为 true 时,结果为 true;否则为 false。
‘#or#’ 仅当两个参数都为 false 时,结果为 false;否则为 true。
集循环函数
@for:该函数用来产生对集成员的约束。
@sum:该函数返回遍历指定的集成员的一个表达式的和。
@min和@max:返回指定的集成员的一个表达式的最小值或最大值。
Lingo提供了大量的标准数学函数
@abs(x)返回 x 的绝对值。
@sin(x)返回 x 的正弦值,x 采用弧度制。
@cos(x)返回 x 的余弦值。
@tan(x)返回 x 的正切值。
@exp(x)返回常数 e 的 x 次方。
@log(x)返回 x 的自然对数。
@lgm(x)返回 x 的 gamma 函数的自然对数。
@mod(x,y)返回 x 除以 y的余数。
@sign(x)如果 x<0 返回-1;否则,返回 1。
@floor(x)返回 x的整数部分。当 x>=0 时,返回不超过 x 的最大整数;当 x<0 时,返回 不低于 x 的最大整数。
@smax(x1,x2,…,xn)返回 x1,x2,…,xn中的最大值。
@smin(x1,x2,…,xn)返回 x1,x2,…,xn中的最小值。
变量界定函数实现对变量取值范围的附加限制,共 4种
@bin(x)限制 x 为 0 或1;
@bnd(L,x,U)限制 L≤x≤U;
@free(x)取消对变量 x的默认下界为 0 的限制,即x可以取任意实数;
@gin(x)限制 x 为整数。
代码格式
model:sets:!此处为集合定义;endsetsdata:!此处为数据导入;enddatacalc:!此处为计算段,专职已知数据的计算处理,不能含有变量;endcalcmin\max=....; !目标函数;@for(....); !约束条件;...end
实例
线性规划
model:sets:!集合名称/成员变量/属性; warehouse/1..6/:e; vendors/1..8/:d;!派生集合名称(集合名称1、2):属性; links(warehouse,vendors):c,x;endsetsdata:!属性=数据列表;!程序与数据在同一文件 e=60 55 51 43 41 52 d=35 37 22 32 41 32 43 38 c=6 2 6 7 4 2 9 5 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;!通过纯文本文件传递数据;e=@file(sdata.txt);e=@file(sdata.txt);e=@file(sdata.txt);@text(sdata2.txt)=@table(x);!将计算结果以表格形式输出文本文件;!sdata.txt文本文件内容 60 55 51 43 41 52~ 35 37 22 32 41 32 43 38~ 6 2 6 7 4 2 9 5 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:c*x);!需求约束; @for(vendors(J):@sum(warehouse(I):x(I,J))=d(J));!产量约束; @for(warehouse(I):@sum(vendors(J):x(I,J))<=e(I));!数据;end
0-1整数规划
model: sets: num/1..10/:x0,y0,x;link(num,num):y,d;endsets data: x0=9.4888 8.7928 11.5960 11.5643 5.6756 9.8497 9.1756 13.1385 15.4663 15.5464; y0=5.6817 10.3868 3.9294 4.4325 9.9658 17.6632 6.1517 11.8569 8.8721 15.5868; enddata calc:@for(link(i,j):d(i,j)=@sqrt((x0(i)-x0(j))^2+(y0(i)-y0(j))^2));endcalcmin=@sum(num:x);@for(num(j):@sum(num(i):y(i,j))>=1);@for(link(i,j):d(i,j)*y(i,j)<=10*x(i));@for(link(i,j):x(i)>=y(i,j));@for(num(i):@sum(num(j):y(i,j))<=5);@for(link(i,j):@bin(y(i,j)));@for(num(i):@bin(x(i)));end
非线性拟合(最小二乘法)
model: sets: num/1..8/:x0,y0;endsets data: x0=6 2 6 7 4 2 5 9; y0=4 9 5 3 8 5 8 2; enddata min=@sum(num:(y0-a/(@exp(b*x0)+c))^2);@free(a);@free(b);@free(c);end
- 数学建模(11)——Lingo使用&数学规划
- 数学建模常用Matlab/Lingo/c代码总结系列——整数规划问题
- 数学建模常用Matlab/Lingo/c代码总结系列——floyd最短路径
- 数学建模常用Matlab/Lingo/c代码总结系列——最小费用最大流问题
- 数学建模常用Matlab/Lingo/c代码总结系列——旅行商TSP问题
- 数学建模常用Matlab/Lingo/c代码总结系列——参数估计
- 数学建模常用Matlab/Lingo/c代码总结系列——层次分析法
- 数学建模常用Matlab/Lingo/c代码总结系列——插值拟合
- 数学建模常用Matlab/Lingo/c代码总结系列——非线性拟合
- 数学建模常用Matlab/Lingo/c代码总结系列——灰色预测
- 数学建模常用Matlab/Lingo/c代码总结系列——Matlab图形绘制函数汇总
- 数学建模常用Matlab/Lingo/c代码总结系列——hamilton回路
- 数学建模--非线性规划
- 数学建模--二次规划
- 数学建模--非线性规划
- 数学建模--整数规划
- 数学建模--非线性规划(二)
- 数学建模规划模型(转)
- 虚拟地址到物理地址的映射
- ajax的替代方案,Fetch
- Android二维码扫描,光线暗时自动补光
- IDEA 中用Maven方式配置SpringMVC
- 机器学习中的范数规则化之(二)核范数与规则项参数选择
- 数学建模(11)——Lingo使用&数学规划
- 转载:提问的技术
- html秒表
- Android Studio找不到Share Project(Subversion) 或主动取消与svn的关联
- 达内科技java培训,四个月搞定零基础
- 日常运维中值得掌握的十个方面技能、经验和工具
- Visual Studio Code 如何配置自动编译
- undefined reference to 'pthread_create'
- JavaSE (八)面向对象程序设计概念解释说明