【步知IE】运筹优化问题求解工具 Lingo

【步知IE】原创文章 第2

一、Lingo软件概述

Lingo是Linear Interaction and General Optimizer的缩写,中文名称为“交互式线性和通用优化求解器”,是由美国LINDO系统公司开发的一套专门用于求解最优化问题的软件包。Lingo可用于求解线性规划、二次规划、整数规划、非线性规划等问题。Lingo的特点是,简单易学,上手快,能够很方便的与Excel、数据库等交互。个人感觉此软件尤其擅长线性规划问题,速度很快。若是优化模型规模很大,则感觉Lingo力不从心了,还有两款很知名的优化问题求解工具,可以很快的求解大规模的优化问题,尤其整数规划,即Gurobi和Cplex,大家可自主了解下这两款软件。

Lingo的默认文件格式扩展名为.lg4,这是一种特殊的二进制格式文件,保存了模型窗口中的所有文本和其他信息。Lingo根据变量、约束条件等不同,也是分不同版本的。有Demo、Solve Suite、Super、Hyper、Industrial、Extended六种,其中Demo版免费,Extended版最高级。通过下表可以有个直观的感觉:

Lingo的相关资料网上很多,下载链接也很多,也有很多相关的教材,目前最高版本为Lingo17;本文所演示的版本为Lingo11。Lingo相关参考资料:

LINDO公司官网主页(Lindo介绍):

https://www.lindo.com/index.php/products/lingo-and-optimization-modeling

《优化建模与LINDO/LINGO软件》(谢金星,薛毅编著,清华大学出版社,2005年7月)

腾讯课堂上有个视频教程,但好像收费。

二、Lingo主界面及菜单栏介绍

Lingo的界面比较简洁,主要分为菜单栏、工具栏、模型编辑窗口等

下图为Lingo工具栏,在图中标出了主要按钮的功能

三、优化模型的在lingo中的编译

当你已经建好优化模型,接下来关键的一步是,如何通过lingo,将其转化为lingo可识别的语言。此部分是lingo学习的主体,内容也很多,本作者也是在学习熟练过程中,故在此只是大概介绍。

1)直译法

对于简单的模型,可以直接照搬到lingo上,lingo是可以识别的,一般做学生作业可以这样来操作,如:

2)使用Lingo语言编译

Lingo语言比较容易掌握,通过一个选址问题的小例子来说明

建模如下:通过分析模型,成本包括运输成本、配送中心建设成本。简单来说,可分别设为:TranCost、BuildCost;设x为运送量,D为运输距离,C为运费;i=1,2,代表工厂,j=1,2,3 代表候选点,k=1,2,3,4,5 代表客户。y为选建点,F为建设费用。

最终所建模型如下:

目标函数:

min = TranCost + BuildCost

将模型转换为Lingo语言:

sets:

ii/1 2/;

jj/1..3/: y, F, Cap;

kk/1..5/: Demand;

link1(ii,jj):xij,Dij,Cij;

link2(jj,kk):xjk,Djk,Cjk;

endsets

!目标函数;

[goal]min =TranCost+BuildCost;

!运输成本;

[TC]TranCost=@sum(link1(i,j):xij(i,j)*Dij(i,j)*Cij(i,j) )+@sum(link2(j,k):xjk(j,k)*Djk(j,k)*Cjk(j,k));

!配送中心建设成本;

[CC]BuildCost =@sum(jj(j):y(j)*F(j));

!配送中心容量约束;

@for(jj(j):[CT_a]@sum(ii(i):xij(i,j))<= y(j)*Cap(j));

!客户需求约束;

@for(kk(k):[CT_b]@sum(jj(j): xjk(j,k))=Demand(k));

!配送中心进出守恒约束;

@for(jj(j):[CT_c]@sum(ii(i):xij(i,j))=@sum(kk(k):xjk(j,k)));

!配送中心是否建设(0-1)约束;

@for(jj:[CT_01] @bin(y));

!运输单位成本赋值;

@for(link1:[CT_p1]Cij=2);

@for(link2:[CT_p2]Cjk=2);

data:

Dij,Djk,Demand,F,Cap

=@ole('Second_data1.xlsx','C2:E3','C6:G8','C11:G11', 'C15:E15','C16:E16');

Enddata

其中“Second_data1.xlsx”数据格式如下图Excel所示:

下面就此例子涉及的程序语言做简要说明:

Lingo语法

1.LINGO根据“MAX=”或“MIN=”寻找目标函数,而除注释和TITLE语句外的其他语句都是约束条件,因此语句的顺序并不重要;

2.每个语句必须以分号“;”结束,每行可以有多个语句,语句可以跨行;

3.变量名称必须以字母(A~Z)开头,由字母、数字(0~9)和下划线组成,长度不超过32个字符,函数一律需要以“@”开头,不区分大小写;

4.可以给语句加上标号,例如:

[OBJ]  MAX=200*X1+300*X2;

5.以!开头,以“;”号结束的语句是注释语句;

6.如果对变量的取值范围没有作特殊说明,则默认所有决策变量都非负;

7.LINGO模型以语句“MODEL:”开头,以“END”结束,对于比较简单的模型,这两个语句可以省略.

模型集合设置:

以“ SETS:” 开始, “ENDSETS”结束,定义必要的集合变量(SET)及其元素(MEMBER,含义类似于数组的下标)和属性(ATTRIBUTE,含义类似于数组);

模型主体部分:

必须包含目标函数,求解Min或Max,涉及函数@min和@max,返回指定的一个表达式的最小值或最大值。约束部分,最常用到求和函数@SUM和循环函数@FOR。

@sum返回遍历指定的集成员的一个表达式的和。

例 求向量[5,1,3,4,6,10]前5个数的和。

data:

N=6;

enddata

sets:

number/1..N/:x;

endsets

data:

x = 5 1 3 4 6 10;

enddata

s=@sum(number(I) | I #le# 5: x);

@for 用来产生对集成员的约束。基于建模语言的标量需要显式输入每个约束,不过@for函数允许只输入一个约束,然后LINGO自动产生每个集成员的约束。

例 产生序列{1,4,9,16,25}

sets:

number/1..5/:x;

endsets

@for(number(I): x(I)=I^2);

模型变量赋值部分:

data开头,enddata结尾,可放置于模型开头、中间、末尾。

@ole为读取数据函数;

@OLE是从EXCEL中引入或输出数据的接口函数,它是基于传输的OLE技术。OLE传输直接在内存中传输数据,并不借助于中间文件。当使用@OLE时,LINGO先装载EXCEL,再通知EXCEL装载指定的电子数据表,最后从电子数据表中获得Ranges。

四、求解状态窗口

当点击求解按钮后,求解结束,会首先跳出来状态窗口(Solver Status),描述模型的参数情况和求解情况等,如下所示:

五、求解报告(Solution Report)

当求解完成时,跳出求解状态窗口的同时,也会同时跳出求解报告窗口,通过打开LINGO菜单->solution,可以调节求解报告的输出方式,如选择输出“Text”格式等。

Global optimal solution found:表示迭代后得到全局最优解。

Objective value:224800.0 表示最优目标值为224800.0。

Value列:给出最优解中各变量的值

Slack or Surplus列:给出松驰变量的值

Reduced Cost列:给出了最优单纯形表中判别数所在行的变量的系数,表示当变量有微小变动时, 目标函数的变化率。

DUAL PRICE列:(对偶价格)表示当对应约束有微小变动时, 目标函数的变化率

六 总结

本文对lingo做了一个大概的介绍,希望读者能从整体上感知Lingo是一个怎样的样子;读者若想能够实际熟练操作和运用Lingo,还需自己多学习,多查找资料,多动手练习。若想学习功能更强大的优化求解器,可以直接学习Gurobi或Cplex,通过教育邮箱(.edu.cn),可以从官网免费下载

作者简介:作者本硕均为工业工程专业,希望和大家共同学习、探讨IE,一步一台阶,前进。专栏名称【步知IE】谐音也可为"不知IE",IE知识涉及广,能真正学好学深,并非易事。

工业工程共学社(IELC)区域、行业细分群筹建中
(0)

相关推荐

  • Algorithm之PrA:PrA之LP线性规划算法经典案例剖析+Matlab编程实现

    Algorithm之PrA:PrA之LP线性规划算法经典案例剖析 一.以例题分析步骤理解LP线性规划算法 1.分析问题 某机床厂生产甲.乙两种机床,每台销售后的利润分别为4000 元与3000 元.生 ...

  • 一种快速求最优值的的方法

    试想一个场景:一个工厂如何在一定原材料.生产力有限的条件下,生产一定数量的系列产品,同时确保系列产品低库存量且保持利润最大化? 这里涉及到最优值(这里是最大值)求解的的问题 最优值是由决策变量和约束条 ...

  • 拉格朗日对偶

    对偶是最优化方法里的一种方法,它将一个最优化问题转换成另外一个问题,二者是等价的.拉格朗日对偶是其中的典型例子.对于如下带等式约束和不等式约束的优化问题: 与拉格朗日乘数法类似,构造广义拉格朗日函数: ...

  • 如何做读书笔记?3步笔记法和3个小工具

    这篇文章前半部分说的是做读书笔记的方法.借鉴了很多国内外名人公开的阅读方法,如塔勒布,罗伯特·西奥迪尼等.后半部分推荐我用的阅读做笔记的3个实用小工具. 拿到一本书后,在开始读正文前,先浏览一遍序言, ...

  • 超级优秀的优化系统工具,等你来撩

    前言 对于电脑上的系统优化工具非常多,可是再多的工具,我们总不能全部去尝试,而且也没有必要!只有选择出适合自己的才是最重要的,比如有些小伙伴喜欢36全家桶,有些喜欢腾讯电脑管家,只要用着舒服就行. 对 ...

  • 人体跟金属一样,在大自然中会逐渐“氧化” 步知网

    [2017下半年四川公务员考试行测真题] 人体跟金属一样,在大自然中会逐渐"氧化".金属氧化是诸如铁生黄锈.铜生铜绿等.人体氧化的罪魁祸首不是氧气,而是氧自由基,是一种细胞核外含不 ...

  • 涨停板学深度教程 57(完结篇):如何优化打板工具?快速打板分屏技巧(2)

    三.看盘目标要清晰 再谈一下看盘的思路. 每天面对电脑屏,你的思路一定要清晰. 首先,我们每天观察的核心是什么? 这时需要做的就是紧跟主流龙头,次主流龙头和妖股.跟上这些龙头股,或做这些龙头股的小弟套 ...

  • 玩抖音必知的3个数据分析工具:会用它们,少走很多弯路

    做一个赚钱的抖音号,除了做好常规内容外,日常数据分析同样很重要. 正所谓"知己知彼,百战不殆",通过专业的抖音数据分析,不仅能了解到行业的最新玩法,还能学习到同行的热门" ...

  • 页面加载秒打开,留住用户快人一步(官方推荐页面优化方案)

    百度搜索对用户行为的研究表明,用户对于网站页面的打开加载速度要求越来越高,首屏的加载时间过长会加速用户的流失. 通过调研,小编发现部分网站站点和智能小程序页面加载速度慢的主要原因分别是页面关键子资源耗 ...

  • 【满分攻略】高考英语一轮复习: 满分攻略第1步 知规则树基功——少失分

    高考英语一轮复习:满分攻略第1步 知规则树基功--少失分

  • seo排名工具_网站排名优化常用工具

    SEO常用的工具有哪些?这个问题应该是比较小白的,但是今天要讲的应该是网站快速提升网站排名的工具,懂SEO的各位站长对网站基础优化所用的工具都是比较了解的,这个放在文章后面给大家讲解,先说一下快速提升 ...

  • 聊聊知乎的广告投放工具知 (1)

    你好,我是徐宿. 今天聊聊知+(知乎官方的广告系统),知乎新手朋友们不一定能看的懂,可以直接拉到文末看看这个系列其他文章: 一点儿拙见,不一定对. 其实关于知乎效果营销平台或者就垂直来说知+,我想要说 ...