LINGO第01章
LINGO教程
LINGO 是用来求解线性和非线性优化问题的简易工具。
LINGO 内置了一种建立最优化模型的语言,可以简便地表达大规模问题, 利用LINGO 高效的求解器可快速求解并分析结果。
§1 LINGO 快速入门当你在windows 下开始运行LINGO 系统时,会得到类似下面的一个窗口:外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。
在主窗口内的标题为LINGO Model – LINGO1的窗口是LINGO 的默认模型窗口,建立的模型都都要在该窗口内编码实现。
下面举两个例子。
例1.1 如何在LINGO 中求解如下的LP 问题:,6002100350..32min 212112121≥≤+≥≥++x x x x x x x t s x x在模型窗口中输入如下代码: min =2*x1+3*x2; x1+x2>=350; x1>=100;2*x1+x2<=600;然后点击工具条上的按钮 即可。
例1.2 使用LINGO 软件计算6个发点8个收点的最小费用运输问题。
产销单位运价如model:!6发点8收点运输问题;sets:warehouses/wh1..wh6/: capacity;vendors/v1..v8/: demand;links(warehouses,vendors): cost, volume;endsets!目标函数;min=@sum(links: cost*volume);!需求约束;@for(vendors(J):@sum(warehouses(I): volume(I,J))=demand(J));!产量约束;@for(warehouses(I):@sum(vendors(J): volume(I,J))<=capacity(I));!这里是数据;data:capacity=60 55 51 43 41 52;demand=35 37 22 32 41 32 43 38;cost=6 2 6 7 4 2 9 54 95 3 8 5 8 25 2 1 9 7 4 3 37 6 7 3 9 2 7 12 3 9 5 7 2 6 55 5 2 2 8 1 4 3;enddataend然后点击工具条上的按钮即可。
LINGO第01章
优化建模
线性规划模型的解的几种情况
线性规划问题
有可行解(Feasible) 无 可 行 解 (Infeasible)
有 最 优 解 ( Optimal )
无
最 优 (Unbounded)
解
优化建模
二次规划模型-例1.2:产销计划问题
某厂生产两个牌号的同一种产品,如何确定产量使利润最大
假设A 假设B
产销平衡
牌号 甲 乙
产量 x1 x2
成本 q1 q2
价格 p1 p2
p随x (两种牌号)增加而减小,呈线性关系
p1 = b1 a11x1 a12 x2 , b1 , a11, a12 > 0, a11 > a12
p2 = b2 a21x1 a22 x2 , b2 , a21, a22 > 0, a22 > a21
优化建模
优化问题的一般形式
优化问题三要素:决策变量;目标函数;约束条件 目标函数 约 束 条 件
min f ( x) s .t . hi ( x ) = 0 , i = 1,..., m g j ( x ) ≤ 0 , j = 1,..., l
决策变量
x∈ D
n
无约束优化(没有约束)与约束优化(有约束) 可行解(只满足约束)与最优解(取到最优值)
优化建模
优化建模与LINDO/LINGO软件
第 1 章 引 言
[原书相关信息] 谢金星, 薛毅编著, 清华大学出版社, 2005年7月第1版.
/~jxie/lindo
优化建模
内容提要
1. 优化模型的基本概念 2. 优化问题的建模实例 3. LINDO/LINGO 软件简介
优化建模
lingo教程1
例7.2 装配线平衡模型 一条装配线含有一系列的工作站,在最终产品的加工过程中每个工作站执行一种或几种特定的任务。
装配线周期是指所有工作站完成分配给它们各自的任务所化费时间中的最大值。
平衡装配线的目标是为每个工作站分配加工任务,尽可能使每个工作站执行相同数量的任务,其最终标准是装配线周期最短。
不适当的平衡装配线将会产生瓶颈——有较少任务的工作站将被迫等待其前面分配了较多任务的工作站。
问题会因为众多任务间存在优先关系而变得更复杂,任务的分配必须服从这种优先关系。
这个模型的目标是最小化装配线周期。
有2类约束:① 要保证每件任务只能也必须分配至一个工作站来加工; ② 要保证满足任务间的所有优先关系。
例 有11件任务(A —K )分配到4个工作站(1—4),任务的优先次序如下图。
每件任务所花费的时间如下表。
MODEL :!装配线平衡模型; SETS :!任务集合,有一个完成时间属性T; TASK/ A B C D E F G H I J K/: T;!任务之间的优先关系集合(A 必须完成才能开始B ,等等); PRED( TASK, TASK)/ A,B B,C C,F C,G F,J G,J J,K D,E E,H E,I H,J I,J /; ! 工作站集合; STATION/1..4/;TXS( TASK, STATION): X;! X 是派生集合TXS 的一个属性。
如果X (I ,K )=1,则表示第I 个任务 指派给第K 个工作站完成; ENDSETS DATA :!任务A B C D E F G H I J K 的完成时间估计如下; T = 45 11 9 50 15 12 12 12 12 8 9; ENDDATA! 当任务超过15个时,模型的求解将变得很慢;!每一个作业必须指派到一个工作站,即满足约束①;@FOR ( TASK( I): @SUM ( STATION( K): X( I, K)) = 1);!对于每一个存在优先关系的作业对来说,前者对应的工作站I 必须小于后 者对应的工作站J ,即满足约束②;@FOR( PRED( I, J): @SUM( STATION( K): K * X( J, K) - K * X( I, K)) >= 0); !对于每一个工作站来说,其花费时间必须不大于装配线周期; @FOR( STATION( K):@SUM( TXS( I, K): T( I) * X( I, K)) <= CYCTIME); !目标函数是最小化转配线周期; MIN = CYCTIME;(A) (B) (C) (F) (G) (K) (J) (I) (H)(E) (D)!指定X(I,J) 为0/1变量; @FOR ( TXS: @BIN ( X)); END例7.3 旅行售货员问题(又称货郎担问题,Traveling Salesman Problem )有一个推销员,从城市1出发,要遍访城市2,3,…,n 各一次,最后返回城市1。
第一讲 初识LINGO
Best Obj Obj Bound Steps
目前为止找到的可行解的最佳 实数 目标函数值 目标函数值的界 实数
特殊求解程序当前运行步数: 非负整数 分枝数(对B-and-B程序); 子问题数(对Global程序); 初始点数(对Multistart程序) 有效步数 非负整数
13
Active
⑶“Variables” 表示变量数量(其中包括变量总数、非线性 变量数、整数变量数) ⑷“Constraints” 表示约束数量(约束总数、非线性约束个数) ⑸“Nonzeros” 表示非零系数数量(总数、非线性项的个数) ⑹“Generator Memory Used(K)”
2
LINDO和LINGO软件能求解的优化模型
优化模型
连续优化
整数规划(IP)
线性规划 (LP)
二次规划 (QP)
非线性规划 (NLP) LINGO
3
LINDO
LINDO/LINGO 软件的求解过程
LINDO/LINGO预处理程序 1、确定常数 2、识别类型 IP 全局优化(选) LP NLP 分枝定界管理程序
113求解状态窗口的参数解释求解扩展求解变量数量约束数量非零系数数量内存使用量求解花费的时间12solverstatus为求解器状态框各子项的含义及状态表域名含义可能的显示modelclass当前模型的类型lpqpilpiqppilpnlpinlppinlp以i开头表示ip以pi开头表示pipstate当前解的状态globaloptimumlocaloptimumfeasibleinfeasibleunboundedinterruptedundeterminedobjective目标函数值实数infeasibility当前约束不满足的总量实数即使该值为0当前解也可能不可行因为这个量中没有考虑用上下界形式给出的约束iterations目前为止的迭代次数非负整数13extendedsolverstatus
LINGO使用教程
LINGO 使用教程LINGO 是用来求解线性和非线性优化问题的简易工具。
LINGO 内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO 高效的求解器可快速求解并分析结果。
§1 LINGO 快速入门当你在windows 下开始运行LINGO 系统时,会得到类似下面的一个窗口:外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。
在主窗口内的标题为LINGO Model – LINGO1的窗口是LINGO 的默认模型窗口,建立的模型都都要在该窗口内编码实现。
下面举两个例子。
例 如何在LINGO 中求解如下的LP 问题: ⎪⎪⎩⎪⎪⎨⎧≥≤+≥≥++0,6002100350..32min212112121x x x x x x x t s x x 在模型窗口中输入如下代码:min =2*x1+3*x2; x1+x2>=350; x1>=100; 2*x1+x2<=600;然后点击工具条上的按钮即可。
例使用LINGO软件计算6个发点8个收点的最小费用运输问题。
产销单位运价如下表。
使用LINGO软件,编制程序如下:model:!6发点8收点运输问题;sets:warehouses/wh1..wh6/: capacity;vendors/v1..v8/: demand;links(warehouses,vendors): cost, volume;endsets!目标函数;min=@sum(links: cost*volume);!需求约束;@for(vendors(J):@sum(warehouses(I): volume(I,J))=demand(J));!产量约束;@for(warehouses(I):@sum(vendors(J): volume(I,J))<=capacity(I));!这里是数据;data:capacity=60 55 51 43 41 52;demand=35 37 22 32 41 32 43 38;cost=6 2 6 7 4 2 9 54 95 3 8 5 8 25 2 1 9 7 4 3 37 6 7 3 9 2 7 12 3 9 5 7 2 6 55 5 2 2 8 1 4 3;enddataend然后点击工具条上的按钮即可。
lingo使用入门
大规模优化问题,常用来解决生产规划、运输、财务金融、投资分配、资本预算、
库存管理、资源配置等领域中的问题。 下图显示了Lingo和Lindo软件能求解的优化模型:
优化模型 连续优化 整数规划(IP)
线性规划 (LP) LINDO
二次规划 (QP)
非线性规划 (NLP)
LINGO
注:1、Lindo从v6.1开始不再进行更新,全部纳入Lingo10.0的版本
4.2 lingo窗口环境及基本用法
4.2.1Lingo软件的安装
4.2.2Lingo软件的窗口环境及基本用法
当启动LINGO系统时,会得到类似下面的窗口(图中是打开的一个模型文件)
例4.1 在Lingo中求解如下的LP问题
max z 100 x 150 y x 80 y 100 s.t. 2 x y 180 x 0, y 0
(1)原始集的定义 为了定义一个原始集,可用下面的语句定义:
setname[/member_list/][:attribute_list];
setname: 集的名字,最好具有较强的可读性, 。集名字必须严格符合标准命名规 则:以拉丁字母或下划线(_)为首字符,其后由拉丁字母(A—Z)、下划线、阿拉
6、Dual Price: 当约束右边的常数增加一个单位时,目标函数将会改变的数
值,对偶变量也叫影子价格。
例4-2 运输问题
4.3 lingo参数设置
4.3.1 Lingo模型的组成
Lingo模型一般由以下几个段组成: 集合段:sets…endsets; 数据段:data…enddata; 初始段:init…endinit; 目标与约束段 计算段:calc…endcalc;
LINGO基本教程(完整版)pdf
LINGO基本教程(完整版)pdf一、教学内容本节课我们使用的教材是《LINGO基本教程》,我们将学习第14章的内容。
第1章介绍LINGO软件的基本操作,包括界面的熟悉、模型的建立等;第2章学习线性规划模型的建立与求解;第3章讲解非线性规划模型的建立与求解;第4章介绍整数规划模型的建立与求解。
二、教学目标1. 学生能够熟练操作LINGO软件,建立和求解线性、非线性以及整数规划模型。
2. 学生能够理解线性、非线性以及整数规划的基本概念,并能够运用到实际问题中。
3. 学生通过学习LINGO基本教程,提高自己的逻辑思维能力和解决实际问题的能力。
三、教学难点与重点重点:熟练操作LINGO软件,建立和求解线性、非线性以及整数规划模型。
难点:理解线性、非线性以及整数规划的基本概念,以及如何将这些概念运用到实际问题中。
四、教具与学具准备教具:多媒体教学设备、投影仪、计算机。
学具:学生计算机、LINGO软件、教材《LINGO基本教程》。
五、教学过程1. 实践情景引入:以一个简单的线性规划问题为切入点,引导学生思考如何利用LINGO软件求解。
2. 讲解教材内容:分别讲解第14章的内容,包括LINGO软件的基本操作、线性规划模型的建立与求解、非线性规划模型的建立与求解以及整数规划模型的建立与求解。
3. 例题讲解:针对每个章节的内容,选择合适的例题进行讲解,让学生通过例题理解并掌握相关知识点。
4. 随堂练习:在每个章节讲解结束后,安排随堂练习,让学生通过练习巩固所学知识。
5. 课堂互动:鼓励学生提问,解答学生在学习过程中遇到的问题。
6. 板书设计:每个章节的重要知识点和操作步骤进行板书设计,方便学生复习。
7. 作业布置:布置与本节课内容相关的作业,巩固所学知识。
六、作业设计1. 作业题目:最大化问题:目标函数:Z = 2x1 + 3x2约束条件:x1 + x2 ≤ 62x1 + x2 ≤ 8x1, x2 ≥ 0最大化问题:目标函数:Z = x1^2 + x2^2约束条件:x1 + x2 ≤ 5x1^2 + x2^2 ≤ 10x1, x2 ≥ 0最大化问题:目标函数:Z = 3x1 + 2x2约束条件:x1 + x2 ≤ 42x1 + x2 ≤ 6x1, x2 均为整数2. 答案:(1)线性规划问题的解为:x1 = 2, x2 = 4(2)非线性规划问题的解为:x1 = 3, x2 = 2(3)整数规划问题的解为:x1 = 2, x2 = 2七、板书设计1. 第1章:LINGO软件的基本操作(1)界面的熟悉(2)模型的建立2. 第2章:线性规划模型的建立与求解(1)目标函数的定义(2)约束条件的设置(3)求解线性规划问题3. 第3章:非线性规划模型的建立与求解(1)目标函数的定义(2)约束条件的设置(3)求解非线性规划问题4. 第4章:整数规划模型的建立与求解(1)目标函数的定义(2)约束条件的设置(3)求解整数规划问题八、课后反思及拓展延伸本节课通过实践情景引入,使学生能够快速融入学习状态。
lingo讲义
第一章Lingo的基本用法我们遇到的许多优化问题都可以归结为规划问题,如线性规划,非线性规划,二次规划,整数规划,动态规划,多目标规划等;当遇到变量比较多或者约束条件表达式比较复杂的情况时,想用手工求解是不可能的;编程计算虽然可行,但工作量大,程序长而繁琐,需要花费大量的时间和精力,还容易出错。
可行的办法是用现成的软件求解,Lingo是专门求解各种规划问题的软件包,其功能非常强大。
§1Lingo入门Lingo是美国的lindo系统公司开发的求解数学规划系列软件中的一个,它的主要功能是求解大型线性,非线性和整数规划问题。
Lingo的主要功能特色为:(1)既能求解线性规划问题,也有较强的求解非线性规划问题的能力;(2)输入模型简练直观;(3)运行速度快,计算能力强;(4)内置建模语言,提供几十个内部函数,从而能以较少语句,以较直观的方式描述较大规模的优化模型;(5)将集合的概念引入编程语言,很容易将实际问题转化为Lingo 模型;(6)能方便地与Excel,数据库等其他软件交换数据。
通常,一个优化模型由以下三部分组成:(1)目标函数:一般表示成求某个数学表达式的最大值或最小值。
(2) 决策变量:目标函数值取决于哪些变量。
(3) 约束条件:对变量附加一些条件限制(通常用等式或不等式表示)。
例1:0,6002100350..32min212112121≥≤+≥≥++x x x x x x x t s x x 对于上述的优化模型,在Lingo 的窗口中输入以下的代码:min =2*x1+3*x2;x1+x2>=350;x1>=100;2*x1+x2<=600;注1:Lingo 默认决策变量都非负,因而变量非负条件可以不必输入。
注2:Lingo 默认的文件格式的扩展名为.lg4,这是一种特殊的二进制文件,保存了模型窗口中所有的文本和其他对象以及格式信息,其它几种扩展名分别代表不同类型的文件。
Lingo教程
LINGO教程LINGO是用来求解线性和非线性优化问题的简易工具。
LINGO内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO高效的求解器可快速求解并分析结果。
§1 LINGO快速入门●安装:实验室的所有电脑都已经事先安装好了Lingo 8(或者9, 10, 11)。
如果要在自己的电脑上安装这个软件,建议从网上下载一个破解版的,按照提示一步一步地安装完毕。
●简单例子:当你在windows系统下开始运行LINGO时,会得到类似下面的一个窗口:外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。
在主窗口内的标题为LINGO Model – LINGO1的窗口是LINGO的默认模型窗口,建立的模型都要在该窗口内编码实现。
下面举两个例子。
例 1 某工厂在计划期内要安排生产I、II两种产品,已知生产单位产品所需的设备台时及A、B两种原材料的消耗,如表所示。
产品I 产品II设备 1 2 8台时原材料A 4 0 16kg原材料B 0 4 12kg该工厂每生产一件产品I可获利2元,每生产一件产品II可获利3元,问应该如何安排生产计划使该厂获利最多?我们用下面的数学模型来描述这个问题。
设x_1、x_2分别表示在计划期内产品I、II的产量。
因为设备的有效台时是8,这是一个限制产量的条件,所以在确定产品I、II的产量时,要考虑不超过设备的有效台时数,即可用不等式表示为x_1 + 2x_2 <=8同理,因原材料A、B的限量,可以得到以下不等式4x_1 <=164x_2 <=12该工厂的目标是在不超过所有资源限量的条件下,如何确定产量x_1、x_2以得到最大的利润。
若用z表示利润,这时z=2x_1+3x_2.综合上述,该计划问题可用数学模型表示为:目标函数 max z=2x_1+3x_2约束条件 x_1 + 2x_2 <=84x_1 <=164x_2 <=12x_1、x_2 >=0一个优化模型一般有三部分组成:1.目标函数(Objective Function):要达到的目标。
LINGO的基本用法
试确定各货栈到各客户处的货物调运数量, 使总的运输费用 最小
返回X的整数部分(向最靠近0的方向取整)
@LGM(X)
返回X的gamma函数的自然对数值
@MOD(X,Y)
运算对象是两个数
#GT# #GE#
左边大于右边时为真,否则为假 左边大于或等于右边时为真,否则为假
#LT#
左边小于右边时为真,否则为假
#LE#
左边小于或等于右边时为真,否则为假
预算对象是逻辑值 或逻辑表达式
#NOT# #AND# #OR#
单目运算符,表示对运算对象取反(即真变假,假变真) 两个运算对象都真时为真,否则为假 两个运算对象都假时为假,否则为真
◆生成图形
由模型生成图形,以矩阵形式显示 模型的系数.
◆调试
调试结果,找到充分行(Sufficient Rows)和必要行 (Necessary Rows). ◆模型统计资料
◆查看(以为本方式显示模型内容)
13
LINGO 教 程
◆命令行窗口
主要是为用户交互地测试命令脚本 而设计.(通常不用)
◆状态窗口
@FOR(VD(J): @SUM(WH(I): X(I, J)) =DJ(J));
21
§1.4 LINGO的运算符和函数
一、 LINGO的常用运算符. 1. 算术运算符.
LINGO 教 程
^* / + -
lingo入门
lingo入门lingo入门教程之一--- 初识lingoingo对于一些线性或者非线性的规划,优化问题非常有效首先介绍一下,在lingo中运行程序时出现的页面(在工具栏点击类似靶子一样的图标便可运行)Solver status:求解器(求解程序)状态框Model Class:当前模型的类型:LP,QP,ILP,IQP,PILP,PIQP,NLP,INLP,PINLP(以I开头表示IP,以PI 开头表示PIP)State:当前解的状态:"Global Optimum", "LocalOptimum", "Feasible", "Infeasible“(不可行), "Unbounded “(无界), "Interrupted“(中断), "Undetermined“(未确定)Object:解的目标函数值Infeasibility:当前约束不满足的总量(不是不满足的约束的个数):实数(即使该值=0,当前解也可能不可行,因为这个量中没有考虑用上下界命令形式给出的约束)Iteration:目前为止的迭代次数Extend solverstatus:扩展的求解器(求解程序)状态框Solver type:使用的特殊求解程序:Bestobj :目前为止找到的可行解的最佳目标函数值Objbound:目标函数值的界Steps:特殊求解程序当前运行步数:Active:有效步数Variables(变量数量):变量总数(T otal)、非线性变量数(Nonlinear)、整数变量数(Integer)。
Constraints(约束数量):约束总数(T otal)、非线性约束个数(Nonlinear)。
Nonzeros(非零系数数量):总数(Total)、非线性项系数个数(Nonlinear)。
GeneratorMemory Used (K) (内存使用量)ElapsedRuntime (hh:mm:ss)(求解花费的时间)运行之后页面介绍(这里的运行界面并不是与上面的运行过程中出现界面一致,即并非来自于同一个程序运行出现)第一行表示在经过457次迭代后得到局部最优解第二行给出该局部最优解的具体值下面给出取局部最优值时,x1 x2的具体取值这里求解的是局部最优解,如果想求出全局最优解,可以进行页面设置:lingo --> option --> global solver --> 勾选use globalsolver对于运行结果也可以另存为,格式一般为ldt,因为有时候对于求解一个问题,或许需要运行很久才可以得出结果,所以没必要每次为了看结果都运行,而是运行成功一次后便把结果保存下来注意事项LINGO总是根据“MAX=”或“MIN=”寻找目标函数;程序语句的顺序一般不重要,既可以随意调换;程序运用函数时都是以@开头;程序中的变量默认为非负数,想要改变变量类型必须有相应函数调整程序中变量不区分大小写;语句必须以分号结尾;注释以!开始,且注释语句后面必须也有分号,注释默认注释到第一个分号处,意思是分号前面会全部被注释掉。
lingo教程
LINGO 使用教程LINGO 是用来求解线性和非线性优化问题的简易工具。
LINGO 内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO 高效的求解器可快速求解并分析结果。
§1 LINGO 快速入门当你在windows 下开始运行LINGO 系统时,会得到类似下面的一个窗口:外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。
在主窗口内的标题为LINGO Model – LINGO1的窗口是LINGO 的默认模型窗口,建立的模型都都要在该窗口内编码实现。
下面举两个例子。
例1.1 如何在LINGO 中求解如下的LP 问题:,6002100350..32min 212112121≥≤+≥≥++x x x x x x x t s x x在模型窗口中输入如下代码: min =2*x1+3*x2; x1+x2>=350; x1>=100;2*x1+x2<=600;然后点击工具条上的按钮 即可。
model:!6发点8收点运输问题;sets:warehouses/wh1..wh6/: capacity;vendors/v1..v8/: demand;links(warehouses,vendors): cost, volume;endsets!目标函数;min=@sum(links: cost*volume);!需求约束;@for(vendors(J):@sum(warehouses(I): volume(I,J))=demand(J));!产量约束;@for(warehouses(I):@sum(vendors(J): volume(I,J))<=capacity(I));!这里是数据;data:capacity=60 55 51 43 41 52;demand=35 37 22 32 41 32 43 38;cost=6 2 6 7 4 2 9 54 95 3 8 5 8 25 2 1 9 7 4 3 37 6 7 3 9 2 7 12 3 9 5 7 2 6 55 5 2 2 8 1 4 3;enddataend然后点击工具条上的按钮即可。
Lingo教程(一)
NLP
IP
分枝定界管理程序
ILPBiblioteka INLPIQP线性优化求解程序
非线性优化求解程序
图 3-2 LINDO/LINGO 软件的求解过程
第 38 页 共 112 页
谢金星:MATLAB 优化工具箱和 LINDO/LINGO 优化软件
第 39 页 共 112 页
2、识别优化模型的类型:对等式约束的预处理完成后,预处理程序能自动识别优化模型 的类型,从而决定下一步采用什么求解程序。如果模型是连续线性规划,下一步直接调用线 性优化求解程序;如果模型是连续非线性规划,下一步直接调用非线性优化求解程序;如果 模型是整数规划,则下一步直接调用分枝定界管理程序。
优化模型
连续优化
整数规划
线性规划
二次规划
非线性规划
LINDO
LINGO
图 3-1 LINDO 和 LINGO 软件能求解的优化模型
第 37 页 共 112 页
谢金星:MATLAB 优化工具箱和 LINDO/LINGO 优化软件
第 38 页 共 112 页
此外,LINDO 系统公司还提供了 LINDO/LINGO 软件与其它开发工具(如 C++和 Java 等语言)的接口软件 LINDO API(Application Program Interface),因此使 LINDO 和 LINGO 软件还能方便地融入到用户应用软件的开发中去。
线性优化求解程序通常使用单纯形算法,对高级版本的 LINDO/LINGO 软件,为了能解 大规模问题,也可以使用内点算法。非线性优化求解程序采用的是顺序线性规划法(Sequential Linear Programming, 简称 SLP),即通过迭代求解一系列线性规划来达到求解非线性规划的 目的。非线性优化求解程序也可以使用其他算法,如广义既约梯度法(Generalized Reduced Gradient, 简称 GRG),并可以自动选用多个初始点开始进行迭代,以便增加找到全局最优解 的可能性。分枝定界管理程序用于管理整数规划问题的分枝定界算法,在运行中还要不断调 用线性优化求解程序和非线性优化求解程序进行定界处理。
LINGO教程——从入门到精通
LINGO 是用来求解线性和非线性优化问题的简易工具。
LINGO 内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO 高效的求解器可快速求解并分析结果。
§1 LINGO 快速入门当你在windows 下开始运行LINGO 系统时,会得到类似下面的一个窗口:外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。
在主窗口内的标题为LINGO Model – LINGO1的窗口是LINGO 的默认模型窗口,建立的模型都都要在该窗口内编码实现。
下面举两个例子。
例1.1 如何在LINGO 中求解如下的LP 问题:,6002100350..32min 212112121≥≤+≥≥++x x x x x x x t s x x在模型窗口中输入如下代码: min =2*x1+3*x2; x1+x2>=350; x1>=100;2*x1+x2<=600;然后点击工具条上的按钮 即可。
例1.2 使用LINGO 软件计算6个发点8个收点的最小费用运输问题。
产销单位运价如下表。
单位 销地 运 价 产地B 1 B 2 B 3 B 4 B 5 B 6 B 7 B 8 产量 A 1 6 2 6 7 4 2 5 9 60 A 24953858255A3 5 2 1 9 7 4 3 3 51A4 7 6 7 3 9 2 7 1 43A5 2 3 9 5 7 2 6 5 41A6 5 5 2 2 8 1 4 3 52销量35 37 22 32 41 32 43 38使用LINGO软件,编制程序如下:model:!6发点8收点运输问题;sets:warehouses/wh1..wh6/: capacity;vendors/v1..v8/: demand;links(warehouses,vendors): cost, volume;endsets!目标函数;min=@sum(links: cost*volume);!需求约束;@for(vendors(J):@sum(warehouses(I): volume(I,J))=demand(J));!产量约束;@for(warehouses(I):@sum(vendors(J): volume(I,J))<=capacity(I));!这里是数据;data:capacity=60 55 51 43 41 52;demand=35 37 22 32 41 32 43 38;cost=6 2 6 7 4 2 9 54 95 3 8 5 8 25 2 1 9 7 4 3 37 6 7 3 9 2 7 12 3 9 5 7 2 6 55 5 2 2 8 1 4 3;enddataend然后点击工具条上的按钮即可。
lingo教程
LINGO 是用来求解线性和非线性优化问题的简易工具。
LINGO 内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO 高效的求解器可快速求解并分析结果。
§1 LINGO 快速入门当你在windows 下开始运行LINGO 系统时,会得到类似下面的一个窗口:外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。
在主窗口内的标题为LINGO Model – LINGO1的窗口是LINGO 的默认模型窗口,建立的模型都都要在该窗口内编码实现。
下面举两个例子。
例1.1 如何在LINGO 中求解如下的LP 问题:0,6002100350..32min 212112121≥≤+≥≥++x x x x x x x t s x x在模型窗口中输入如下代码: min =2*x1+3*x2; x1+x2>=350; x1>=100;2*x1+x2<=600;然后点击工具条上的按钮 即可。
例1.2 使用LINGO 软件计算6个发点8个收点的最小费用运输问题。
产销model :!6发点8收点运输问题; sets :warehouses/wh1..wh6/: capacity; vendors/v1..v8/: demand;links(warehouses,vendors): cost, volume; endsets !目标函数;min =@sum (links: cost*volume); !需求约束;@for (vendors(J):@sum (warehouses(I): volume(I,J))=demand(J)); !产量约束;@for (warehouses(I):@sum (vendors(J): volume(I,J))<=capacity(I));!这里是数据; data :capacity=60 55 51 43 41 52;demand=35 37 22 32 41 32 43 38; cost=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 end然后点击工具条上的按钮 即可。
lingo1
Thank you for your attendance! 祝大家 在数学建模活动中 有更大的收获!
参考书籍
1.袁新生,邵大宏,郁时炼.LINGO和 EXCEL在数学建模中的应用,科学出版社, 2005. 2.谢金星,薛毅.优化建模与LINDO/LINGO软 件.天津大学出版社,2005.
第一讲 LINGO的基本用法 的基本用法
windows开始运行LINGO时,会得到下面的一个窗口:
外层是主框架窗口,包含了所有菜单命令和工具条, 其它所有的窗口将被包含在主窗口之下。在主窗 口内的标题为LINGO Model – LINGO1的窗口是 LINGO的默认模型窗口,建立的模型都都要在该窗 口内编码实现。
Member_ list是集成员列表。如果集成员放在集定义中, 那么对它们可采取显式罗列和隐式罗列两种方式。如果集 成员不放在集定义中,则可以在随后的数据部分定义它们。 ① 当显式罗列成员时,必须为每个成员输入一个不同的 名字,中间用空格或逗号搁开,允许混合使用。 例 可以定义一个名为students的原始集,它具有成员 John、Jill、Rose和Mike,属性有sex和age: sets: students/John Jill, Rose Mike/: sex, age; endsets ② 当隐式罗列成员时,不必罗列出每个集成员。可采用 如下语法: setname/member1..memberN/[: attribute_list]; 这里的member1是集的第一个成员名,memberN是集的 最末一个成员名。LINGO也接受一些特定的首成员名和末 成员名,用于创建一些特殊的集。
LINGO教程
LINGO 是用来求解线性和非线性优化问题的简易工具。
LINGO 内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO 高效的求解器可快速求解并分析结果。
§1 LINGO 快速入门当你在windows 下开始运行LINGO 系统时,会得到类似下面的一个窗口:外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。
在主窗口内的标题为LINGO Model – LINGO1的窗口是LINGO 的默认模型窗口,建立的模型都都要在该窗口内编码实现。
下面举两个例子。
例1.1 如何在LINGO 中求解如下的LP 问题:0,6002100350..32min 212112121≥≤+≥≥++x x x x x x x t s x x在模型窗口中输入如下代码: min =2*x1+3*x2; x1+x2>=350; x1>=100;2*x1+x2<=600;然后点击工具条上的按钮 即可。
例1.2 使用LINGO 软件计算6个发点8个收点的最小费用运输问题。
产销单位运价如model:!6发点8收点运输问题;sets:warehouses/wh1..wh6/: capacity;vendors/v1..v8/: demand;links(warehouses,vendors): cost, volume;endsets!目标函数;min=@sum(links: cost*volume);!需求约束;@for(vendors(J):@sum(warehouses(I): volume(I,J))=demand(J));!产量约束;@for(warehouses(I):@sum(vendors(J): volume(I,J))<=capacity(I));!这里是数据;data:capacity=60 55 51 43 41 52;demand=35 37 22 32 41 32 43 38;cost=6 2 6 7 4 2 9 54 95 3 8 5 8 25 2 1 9 7 4 3 37 6 7 3 9 2 7 12 3 9 5 7 2 6 55 5 2 2 8 1 4 3;enddataend然后点击工具条上的按钮即可。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
线性规划模型
A1,A2每公斤的获利是与各 自产量无关的常数 每桶牛奶加工出A1,A2的数量和 时间是与各自产量无关的常数 A1,A2每公斤的获利是与相 互产量无关的常数 每桶牛奶加工出A1,A2的数量和 时间是与相互产量无关的常数 加工A1,A2的牛奶桶数是实数
可 加 性
连续性
优化建模
模型求解
x1 + x2 ≤ 50
聘用方案
优化建模
整数规划 模型(IP)
优化建模
0-1规划 -混合泳接力队的选拔
例1.5: 5名候选人的百米成绩
蝶泳 仰泳 蛙泳 自由泳 甲 1’06”8 1’15”6 1’27” 58”6 乙 57”2 1’06” 1’06”4 53” 丙 1’18” 1’07”8 1’24”6 59”4 丁 1’10” 1’14”2 1’09”6 57”2 戊 1’07”4 1’11” 1’23”8 1’02”4
优化建模
目标
x1 , x2
利润最大
max z ( x1, x2 ) = ( p1 q1) x1 + ( p2 q2 ) x2
= (100-x1-0.1 x2-2)x1 +(280-0.2x1-2x2-3)x2 =98 x1 + 277 x2 - x12 - 0.3 x1 x2 - 2x22
约束
n
线性规划(LP) 目标和约束均为线性函数 非线性规划(NLP) 目标或约束中存在非线性函数 二次规划(QP) 目标为二次函数、约束为线性 整数规划(IP) 决策变量(全部或部分)为整数 整数线性规划(ILP),整数非线性规划(INLP) 纯整数规划(PIP), 混合整数规划(MIP) 一般整数规划,0-1(整数)规划
优化建模
1. 优化模型的基本概念
优化建模
优化模型和算法的重要意义
最优化: 在一定条件下,寻求使目标最大(小)的决策 最优化是工程技术、经济管理、科学研究、社 会生活中经常遇到的问题, 如: 结构设计 资源分配 生产计划 运输方案
解决优化问题的手段 经验积累,主观判断 作试验,比优劣 建立数学模型,求解最优策略
每天获利 Max z = 72 x1 + 64 x2
x1 + x2 ≤ 50
12 x1 + 8 x2 ≤ 480
约束条件
3x1 ≤ 100 x1 , x 2 ≥ 0
优化建模
模型分析与假设
比 例 性 xi对目标函数的“贡 献”与xi取值成正比 xi对约束条件的“贡 献”与xi取值成正比 xi对目标函数的“贡 献”与xj取值无关 xi对约束条件的“贡 献”与xj取值无关 xi取值连续
产销平衡
牌号 甲 乙
产量 x1 x2
成本 q1 q2
价格 p1 p2
p随x (两种牌号)增加而减小,呈线性关系
p1 = b1 a11x1 a12 x2 , b1 , a11, a12 > 0, a11 > a12
p2 = b2 a21x1 a22 x2 , b2 , a21, a22 > 0, a22 > a21
min
∑∑
j =1 i =1 2
2
6
cij [( x j ai ) 2 + ( y j bi ) 2 ]1 / 2
s.t .
∑c
j =1 6 i =1
ij = d i ,
i = 1,..., 6
∑c
ij ≤ e j ,
j = 1, 2
i ci1 (料场 A) ci 2 (料场 B)
1 3 0
2 5 0
优化建模
局部最优解与整体最优解
f(x)
x1
* o x2 x
局部最优解 (Local Optimal Solution, 如 x1 ) 整体最优解 (Global Optimal Solution, 如 x2 )
优化建模
优化模型的 简单分类
数学规划 连 续 优 化 离 散 优 化
min f ( x) s .t . hi ( x ) = 0 , i = 1,..., m g j ( x ) ≤ 0 , j = 1,..., l x∈ D
图解法
约 l2 : 12 x1 + 8 x2 = 480 束 12 x1 + 8 x2 ≤ 480 l4 条 3x1 ≤ 100 l3 : 3x1 = 100 件 c l4 : x1 = 0, l5 : x2 = 0 x1 , x 2 ≥ 0 目标 函数
l1 : x1 + x2 = 50
x2 A l1 B l2
优化建模
优化模型的简单分类和求解难度
优化
连续优化
整数规划
线性规划
二次规划
非线性规划
问题求解的难度增加
优化建模
2. 优化问题的建模实例
优化建模
线性规划模型-例1.1: 奶制品生产计划
1桶 牛奶 或 12小时 3公斤A1 4公斤A2 获利24元/公斤 获利16元/公斤
8小时 每天: 50桶牛奶 时间480小时 至多加工100公斤A1 制订生产计划,使每天获利最大 35元可买到1桶牛奶,买吗?若买,每天最多买多少? 可聘用临时工人,付出的工资最多是每小时几元? A1的获利增加到 30元/公斤,应否改变生产计划?
优化建模
LP其他算法
内点算法(Interior point method)
20世纪80年代人们提出的一类新的算法——内点算法 也是迭代法,但不再从可行域的一个顶点转换到另一个 顶点,而是直接从可行域的内部逼近最优解。
有效集(Active Set)方法
LP是QP的特例(只需令所有二次项为零即可) 可以用QP的算法解QP(如: 有效集方法)
Max z = 72 x1 + 64 x2
z=c (常数) ~等值线
0
l5 Z=0
C Z=3600 l3 x1 D Z=2400
在B(20,30)点得到最优解 最优解一定在凸多边 形的某个顶点取得。
目标函数和约束条件是线性函数 可行域为直线段围成的凸多边形 目标函数的等值线为直线
优化建模
LP的约束和目标函数均为线性函数 2维 可行域 线段组成的凸多边形 目标函数 等值线为直线 最优解 凸多边形的某个顶点 求解LP的基本思想 思路:从可行域的某一顶点开始,只需在有限多个 顶点中一个一个找下去,一定能得到最优解。 LP的通常解法是单纯形法(G. B. Dantzig, 1947) n维 超平面组成的凸多面体 等值线是超平面 凸多面体的某个顶点
决策变量: ci j,(xj,yj)~16维 非线性规划模型 (NLP)
s.t.
∑c
j =1 6 i =1
ij = d i ,
i = 1,...,6
∑c
ij ≤ e j ,
j = 1,2
优化建模
整数规划 - 例1.4: 聘用方案
某服务部门一周中每天需要不同数目的雇 员 : 周 一 到 周 四 每 天 至 少 50 人 , 周 五 和 周 日 每 天 至 少 80 人 , 周 六 至 少 90 人 。 现规定应聘者需连续工作 5 天,试确定聘用 方案,即周一到周日每天聘用多少人,使在 满足需要的条件下聘用总人数最少。
优化建模
优化问题的一般形式
优化问题三要素:决策变量;目标函数;约束条件 目标函数 约 束 条 件
min f ( x) s .t . hi ( x ) = 0 , i = 1,..., m g j ( x ) ≤ 0 , j = 1,..., l
决策变量
x∈ D
n
无约束优化(没有约束)与约束优化(有约束) 可行解(只满足约束)与最优解(取到最优值)
假设:料场 和工地之间 有直线道路
1)现有 2 料场,位于 A (5, 1), B (2, 7), 记(xj,yj),j=1,2, 日储量 ej 各有 20 吨。
目标:制定每天的供应计划,即从
A, B 两料场分别 向各工地运送多少吨水泥,使总的吨公里数最小。
优化建模
决策变量:ci j (料场j到工地i的 运量)~12维 线性规划模型(LP) 用例中数 据计算, 最优解为
优化建模
线性规划模型的解的几种情况
线性规划问题
有可行解(Feasible) 无 可 行 解 (Infeasible)
有 最 优 解 ( Optimal )
无
最 优 (Unbounded)
解
优化建模
二次规划模型-例1.2:产销计划问题
某厂生产两个牌号的同一种产品,如何确定产量使利润最大
假设A 假设B
4
整数规划问题 min x∈ Z n 一般形式
f ( x)
优化建模
s .t .
hi ( x ) = 0 , i = 1,..., m g j ( x ) ≤ 0 , j = 1,..., l
整数规划问题的分类
整数线性规划(ILP) 目标和约束均为线性函数 整数非线性规划(NLP) 目标或约束中存在非线性函数 纯(全)整数规划(PIP) 决策变量均为整数 混合整数规划(MIP) 决策变量有整数,也有实数 0-1规划 决策变量只取0或1
若选择队员i参加泳姿j 的比赛,记xij=1, 否则记xij=0 目标 函数
Min
Z = ∑ ∑ c ij x ij
j =1 i =1
4
5
0-1规划: 整数规划的特例
5
每人最多入选泳姿之一 约束 4 条件 ∑ xij ≤ 1, i = 1, 5
j =1
每
= 1, j = 1,
优化建模
优化建模与LINDO/LINGO软件
第 1 章 引 言
[原书相关信息] 谢金星, 薛毅编著, 清华大学出版社, 2005年7月第1版.