注意点

1、Lingo 默认所有变量不为负数,故应先进行定义域自由化。
2、Lingo 只有三种关系运算符:“=”、“>=”以及“<=”。没有单独的“>”和“<”,若出现,Lingo 则视为省略了“=”。
3、Lingo 中的if 函数,必须自带一个else。
4、看不懂可以上这个网站 学习地址

一、lingo函数

1、变量定界函数

函数名 作用
@bin(x) 限制x只能取0或 1,0−1规划中特别有用
@gin(x) 限制x为整数,在整数规划中特别有用
@bnd(a,x,b) 限制 a≤x≤b
@free(x) 取消对变量x 非负的限制,使其定义域自由(lingo默认变量为非负)

2、数学函数

函数名 返回值
@sin(x) 返回x 的正弦值
@cos(x) 返回x 的余弦值
@tan(x) 返回x 的正切值
@log(x) 返回x 的自然对数值,其他底数用换底公式
@exp(x) 返回ex的值,因e的数值无法敲入而诞生
@abs(x) 返回x 的绝对值
@sigh(x) 返回 x的符号值x≥0为1,x<0为−1
@floor(x) 返回x 的整数部分,向靠近0 的方向取整
@smax( X1,X2,……, Xn) 返回其中的最大值
@smin( X1, X2,……,Xn) 返回其中的最小值

3、集合操作函数

设mark工厂生产 6个元素的矩阵:

函数名 作用
@for( mark : a>0 ) 循环
@sum( mark : a ) 求和
@prod( factory : a ) 求积
@max( factory : a ) 求最大值
@min( factory : a ) 求最小值

二、线性规划

1、例题


lingo\matlab代码

lingo程序:
model:
max=2*x1+x2-5*x3;x1+x2+x3=7;
2*x1-5*x2+x3>=10;
x1+3*x2+x3<=12;
end
%就是把条件输入即可matlab程序:
c = [-2 -3 5]';
A = [-2 5 -1;1 3 1];
b = [-10 12];
Aeq = ones(1,3);
beq = 7;
lb = zeros(3,1);
[x fval] = linprog(c, A, b, Aeq, beq, lb)
fval = -fval %

2、实际问题求解


我们可以通过对问题的分析我们得出以下方程:
lingo\matlab代码:

%% 生产决策问题
lingo代码:model:
sets:
gonjian /1..9 / :a,x;
endsets
%定义矩阵工厂
data:
a=0.75,0.7753,-0.375,-0.447428571428571,-0.35,-0.5,-0.2889,1.15,0.684371428571428;
enddata
%导入数据
max=@sum(gonjian : a*x);
5*x(1)+10*x(6)<=6000;
7*x(2)+9*x(7)+12*x(9)<=10000;
6*x(3)+8*x(8)<=4000;
4*x(4)+11*x(9)<=7000;
7*x(5)<=4000;
x(1)+x(2)=x(3)+x(4)+x(5);
x(6)+x(7)=x(8);
end
%一样是输入条件
matlab代码format long g   %可以将Matlab的计算结果显示为一般的长数字格式
% (1) 系数向量
c = zeros(9,1); % 初始化目标函数的系数向量全为0
c(1) = 1.25 -0.25 -300/6000*5;  % x1前面的系数是c1
c(2) = 1.25 -0.25 -321/10000*7;
c(3) = -250 / 4000 * 6;
c(4)  = -783/7000*4;
c(5) = -200/4000 * 7;
c(6) = -300/6000*10;
c(7) = -321 / 10000 * 9;
c(8) = 2-0.35-250/4000*8;
c(9) = 2.8-0.5-321/10000*12-783/7000*11;
c = -c;  % 我们求的是最大值,所以这里需要改变符号
% (2) 不等式约束
A = zeros(5,9);
A(1,1) = 5;  A(1,6) = 10;
A(2,2) = 7;  A(2,7) = 9; A(2,9) = 12;
A(3,3) = 6;  A(3,8) = 8;
A(4,4) = 4;  A(4,9) = 11;
A(5,5) = 7;
b = [6000 10000 4000 7000 4000]';
% (3) 等式约束
Aeq = [1 1 -1 -1 -1 0 0 0 0;0 0 0 0 0 1 1 -1 0];
beq = [0 0]';
%(4)上下界
lb = zeros(9,1);% 进行求解
[x fval] = linprog(c, A, b, Aeq, beq, lb)
fval = -fval
intcon = 1:9;
[x,fval]=intlinprog(c,intcon,A,b,Aeq,beq,lb)
fval = -fval

从这两个问题可以看出求解线性规划规划问题中用lingo软件要方便一点。

二、整数规划

1、例题


lingo\matlab代码

lingo代码:
model:
min=18*x1+23*x2+5*x3;
107*x1+500*x2>=500;
107*x1+500*x2<=50000;
72*x1+121*x2+65*x3>=2000;
72*x1+121*x2+65*x3<=2250;
@gin(x1);
@gin(x2);
@gin(x3);
%%%无非加了一个@gin()函数
%%%所以求解0-1规划时直接用@bin()函数就可以了
endmatlab代码:
c=[18,23,5]';
intcon=3;  % x3限定为整数
A=[107,500,0;72,121,65;-107,-500,0;-72,-121,-65];
b=[50000;2250;-500;-2000];
lb=zeros(3,1);
[x,fval]=intlinprog(c,intcon,A,b,[],[],lb)

2、实际问题求解

在线性规划中那给实际问题中工件不可能有小数的出现,所以上面那个问题实际是个整数规划问题
代码如下:

model:
sets:
gonjian /1..9 / :a,x;
endsets
%定义矩阵工厂
data:
a=0.75,0.7753,-0.375,-0.447428571428571,-0.35,-0.5,-0.2889,1.15,0.684371428571428;
enddata
%导入数据
max=@sum(gonjian : a*x);
5*x(1)+10*x(6)<=6000;
7*x(2)+9*x(7)+12*x(9)<=10000;
6*x(3)+8*x(8)<=4000;
4*x(4)+11*x(9)<=7000;
7*x(5)<=4000;
x(1)+x(2)=x(3)+x(4)+x(5);
x(6)+x(7)=x(8);
@for(gonjian : @gin(x));
%%不过是在上面那个线性规划中加如一个@gin()函数而已
%%求解0-1规划问题则是加如@bin()函数
end

3、0-1规划问题(背包问题)


通过对题目分析可得:

lingo\matlab代码:

%% 背包问题(货车运送货物的问题)
lingo代码:model:
sets:
dinyi /1..10/ : a,b,x;
endsets
data:
a=6,3,4,5,1,2,3,5,4,2;
b=540,200,180,350,60,150,280,450,320,120;
enddata
max=@sum(dinyi : b*x);
@sum(dinyi : a*x)<=30;
@for(dinyi : @bin(x));
%无非加了@bin()函数
endmatlab代码:c = -[540 200 180 350 60 150 280 450 320 120];  % 目标函数的系数矩阵(最大化问题记得加负号)
intcon=[1:10];  % 整数变量的位置(一共10个决策变量,均为0-1整数变量)
A = [6 3 4 5 1 2 3 5 4 2];  b = 30;   % 线性不等式约束的系数矩阵和常数项向量(物品的重量不能超过30)
Aeq = []; beq =[];  % 不存在线性等式约束
lb = zeros(10,1);  % 约束变量的范围下限
ub = ones(10,1);  % 约束变量的范围上限
%最后调用intlinprog()函数
[x,fval]=intlinprog(c,intcon,A,b,Aeq,beq,lb,ub)
fval = -fval

总结

求解整数规划用@gin()函数
求解0-1规划用@bin()函数

我认为求解线性规划和整数规划可以用lingo软件,非线性规划还是建议使用matlab求解。

线性规划和整数规划求解(lingo\matlab)相关推荐

  1. java 整数规划_线性规划与整数规划求解速度对比

    文章发表于微信公众号[数据魔术师]:线性规划&整数规划求解速度PK线性规划&整数规划求解速度PK​mp.weixin.qq.com 相信大家对线性规划和整数规划应该不陌生,在开始今天的 ...

  2. 线性规划 - 用单纯形法解决整数规划问题 - (Matlab、Lingo建模)

    现实生活中,比如机器的台数,参与工作的人数,可调动的车辆数,这些数据都是整数.因此对于变量中包含整数.或者完全是整数的规划问题,我们称之为整数规划.在解决整数规划常用的算法便是单纯形法. 课题名称:任 ...

  3. matlab 线性规划求最大值,MATLAB求解线性规划(含整数规划和01规划)问题.pdf

    MATLAB求解线性规划(含整数规划和01规划)问题 MATLAB 求解线性规划(含整数规划和0-1 规划)问题 线性规划是数学规划中的一类最简单规划问题,常见的线性规划是一个有约 束的,变量范围为有 ...

  4. matlab中用于离散系统求解的命令,MATLAB求解规划问题(线性规划, 整数规划, 非线性规划)...

    文章目录 基础知识 规划问题的数学模型的三个要素 解 线性规划Linear Programing 理论 示例 整数规划 理论 示例 非线性规划 理论 示例 生产实践中,经常会遇到很多资源分配的问题,如 ...

  5. 0-1整数规划的LINGO求解

    1.LINGO的简介 LINGO是由美国LINDO公司推出的求解优化模型的软件,对于求解线性.非线性和整数最佳化模型这类运筹学方面的问题,LINGO是一个很好的工具.官方提供免费试用版,可以在其官网下 ...

  6. 【数学建模】(十):Lingo使用:线性规划+非线性规划+整数规划

    [数学建模](十):Lingo使用:线性规划+非线性规划+整数规划 线性规划 运输问题 整数规划 非线性规划 线性规划 设x1x_1x1​桶牛奶生产A1A_1A1​, x2x_2x2​桶牛奶生产A2A ...

  7. 线性规划问题的数学建模matlab,数学建模讲座之三——利用Matlab求解线性规划问题(linprog函数).ppt...

    数学建模讲座之三--利用Matlab求解线性规划问题(linprog函数) 利用Matlab求解线性规划问题 线性规划是一种优化方法,Matlab优化工具箱中有现成函数linprog对如下式描述的LP ...

  8. 线性规划—钢管下料问题及MATLAB求解

    问题 零售商进货钢管都是19m长,现有客户购买50根4m长.20根6m长.15根8m长的钢管,问钢管如何切割?切割后的余料最少,能否写出模型. 问题分析 因为切割目标是切割后余料最少,通常假设一个合理 ...

  9. 【LINGO】工人工作整数规划求解

    目录 1.工人工作整数规划求解 2.问题分析 3.问题求解 1.工人工作整数规划求解 有四个工人,要分别指派他们完成四项不同的工作,每个人做各项工作所消耗的时间如表.问应该如何指派,

最新文章

  1. ADO与ADO.NET的区别与介绍
  2. ae saber插件_【AE插件】 用于做动画制作/设计的五个免费插件 非常好用
  3. 批量删除文件名中的相同文字
  4. 转-最常被程序员们谎称读过的计算机书籍
  5. Android Binder机制(1501210451 张志康)
  6. 关于使用QQ、新浪微博、腾讯微博等第三方登录网站的开发过程(一)
  7. Python 3.5.2建立与DB2的连接
  8. 如何解决UltraCompare中中文显示乱码的问题
  9. 信用逾期3年是不是一定会坐牢?
  10. MySQL数据库的datetime与timestamp
  11. java jsonobject_Java实现QQ登录
  12. JAVA程序员面试总结,高手整整理加强版
  13. 文献检索的正确姿势——新生培训
  14. MySQL存储过程语句(if,while)的使用
  15. 从数据库导出到EXCEL文件的sql语句
  16. SpringBoot整合Shiro(Java安全框架)案例(含源码)
  17. 接手线上Mysql服务器,我们需要做什么?
  18. 西北大学计算机课表,西北大学课表_2
  19. ubuntu kylin 简单更新内置 firefox 记录(可使用安装包离线更新)
  20. 10行java代码实现email代码表白感恩节必备~

热门文章

  1. SSM开发笔记-尚硅谷-佟刚-Spring4.0.0
  2. java手机振动软件_Android实现手机震动效果
  3. 四川省13家企业荣获第十三届创新中国企业家论坛“创新型企业”奖
  4. 下拉列表(select标签)
  5. 彻底了解 suid, sgid ,sticky权限
  6. m4s格式,多线程爬B站视频
  7. includes() 方法
  8. tableau各种精典示例经验总结01
  9. python爬取凤凰新闻网_python爬取凤凰网站的新闻,及其链接地址,来源,时间和内容,用selenium自动化和requests处理数据...
  10. 虚拟化技术:KVM介绍及试用