数学规划模型及LINGO讲义

合集下载

第四章 数学规划模型(附LINGO程序)

第四章 数学规划模型(附LINGO程序)
车间级:根据生产计划、工艺流程、资源约束及费 用参数等,以最小成本为目标制订生产批量计划。 时间层次 若短时间内外部需求和内部资源等不随时间变化,可 制订单阶段生产计划,否则应制订多阶段生产计划。 本节课题
例1 加工奶制品的生产计划
1桶 牛奶 或 12小时 8小时 3公斤A1 获利24元/公斤
4公斤A2
2小时,3元 获利16元/kg 8小时 4千克 A2
1千克
获利44元/千克
决策 变量 目标 函数 约束 条件
2小时,3元 出售x1 千克 A1, x2 千克 A2, X3千克 B1, x4千克 B2 x5千克 A1加工B1, x6千克 A2加工B2 利润
0.75千克 B2
获利32元/千克
Max z 24x1 16x2 44x3 32x4 3x5 3x6
NO. ITERATIONS=
―资源” 剩余为零的约束为紧约束(有效约束)
OBJECTIVE FUNCTION VALUE
1) 3360.000 VALUE 20.000000 30.000000 REDUCED COST 0.000000 0.000000 DUAL PRICES
结果解释
最优解下“资源”增加 1单位时“效益”的增 量
20桶牛奶生产A1, 30桶生产A2,利润3360元。
结果解释
max 72x1+64x2
st 2)x1+x2<50
OBJECTIVE FUNCTION VALUE 1) 3360.000
VARIABLE
X1 X2
VALUE
20.000000 30.000000
REDUCED COST
0.000000 0.000000

用Lingo求解整数(0-1)规划模型

用Lingo求解整数(0-1)规划模型
要求:
1、建立数学模型, 2、用lingo循环语句编写程序.
上机作业题 人员安排问题
某城市的巡逻大队要求每天的各个时间段都有一
定数量的警员值班, 以便随时处理突发事件, 每人连续 工作6h, 中间不休息. 如表所示是一天8个班次所需值 班警员的人数情况统计:
班次
时间段
人数 班次
时间段
人数
1
6:00~9:00
例 4 求函数 z x 22 y 22 的最小值.
例 4 求函数 z x 22 y 22 的最小值.
解: 编写Lingo 程序如下:
min=(x+2)^2+(y-2)^2; @free(x); 求得结果: x=-2, y=2
二、Lingo 循环编程语句
(1) 集合的定义 包括如下参数: 1) 集合的名称.
12,8 3,0; enddata
!数据赋值;
max=@sum(bliang(i):a(i)*x(i)); !目标函数;
@for(yshu(j):@sum(bliang(i):x(i)*c(j,i))<=b(j));
!约束条件;
例6:人员选拔问题
队员号码 身高 / m 位置 队员号码 身高 / m 位置
例 2 用Lingo软件求解整数规划问题
min z 2 x1 5 x2 3 x3
4 x1 x2 x3 0
2
x1
4 x2
2 x3
2
x1
x2
x3
2
xi 0 且取整数, i 1, 2, 3
Lingo 程序:
min=2*x1+5*x2+3*x3; -4*x1-x2+x3>=0; -2*x1+4*x2-2*x3>=2; x1-x2+x3>=2; @gin(x1);@gin(x2);@gin(x3);

培训教案——LINGO(一)

培训教案——LINGO(一)

培训教案——LINGO(一)LINGO是一款常用的线性规划软件,它能够方便地解决复杂问题。

培训LINGO,需要深入了解软件的使用方法和解决实际问题的能力。

下面就LINGO培训的内容进行分点介绍。

一、LINGO的基础知识LINGO的基础知识包括软件的基本功能和操作。

需要讲解LINGO的界面、工具栏、菜单栏等。

初次接触LINGO的学员需要掌握LINGO的一些基本用法,比如如何输入数据、如何设定优化目标,如何设置约束等,这些都是LINGO的基本操作。

二、LINGO求解模型了解LINGO的基本操作之后,需要讲解LINGO的求解模型。

LINGO的数学模型是LINGO软件解决问题必需的部分。

对于LINGO求解模型的学习,需要学员掌握数学模型的建立方法和标准的数学模型。

培训学员掌握LINGO的求解模型知识是LINGO培训的核心。

三、LINGO的高级应用LINGO的高级应用需要讲授如何利用LINGO解决实际问题,需要讲解如何构建多约束模型来描述现实中的问题,如何设置变量、常数和目标函数等。

高级应用的讲授需要结合实例,让学员深入了解LINGO的实际应用场景,提高解决实际问题的能力。

四、LINGO的调试LINGO的调试是LINGO培训的重要组成部分。

在LINGO求解过程中,有时会出现错误,导致模型不能正常求解。

因此,需要讲解LINGO调试的方法和技巧,使得学员具备调试LINGO模型的能力。

五、LINGO应用举例为了让学员进一步巩固LINGO的知识,需要讲解一些LINGO的应用举例。

举例的内容包括:产品组合问题、生产调度问题、财务规划问题、运输规划问题等。

通过这些示例,让学员对LINGO的应用有更加深刻的理解。

六、LINGO的作业练习培训LINGO需要进行实际操作,软件操作的熟练程度可以通过作业考核来体现。

作业练习的难度需要逐渐增加,从简单到复杂地设置模型,巩固培训成果。

LINGO培训需要根据学员的水平进行分类管理,加强培训的个性化和针对性。

线性规划问题的Lingo求解

线性规划问题的Lingo求解

Lingo中参数设置与调整
01
参数设置
02
调整策略
Lingo允许用户设置求解器的参数, 如求解方法、迭代次数、收敛精度等 。这些参数可以通过`@option`进行 设置。
如果求解过程中遇到问题,如无解、 解不唯一等,可以通过调整参数或修 改模型来尝试解决。常见的调整策略 包括放松约束条件、改变目标函数权 重等。
02
比较不同方案
03
验证求解结果
如果存在多个可行解,需要对不 同方案进行比较,选择最优方案。
可以通过将求解结果代入原问题 进行验证,确保求解结果的正确 性和合理性。
感谢您的观看
THANKS
问题,后面跟随线性表达式。
02 03
约束条件表示
约束条件使用`subject to`或简写为`s.t.`来引入,后面列出所有约束条 件,每个约束条件以线性表达式和关系运算符(如`<=`, `>=`, `=`, `<`, `>`)表示。
非负约束
默认情况下,Lingo中的变量是非负的,如果变量可以为负,需要使用 `@free`进行声明。
问题的解通常出现在约束条件的边界上 。
变量通常是连续的。
特点 目标函数和约束条件都是线性的。
线性规划问题应用场景
生产计划
确定各种产品的最优生产量, 以最大化利润或最小化成本。
资源分配
在有限资源下,如何最优地分 配给不同的项目或任务。
运输问题
如何最低成本地将物品从一个 地点运输到另一个地点。
金融投资
03
求解结果
通过Lingo求解,得到使得总加工时间最短的生产计划安 排。
运输问题优化案例
问题描述
某物流公司需要将一批货物从A地运往B地,可以选择不同的运输方式和路径,每种方式和路径的运输时间和成本不 同。公司需要在满足货物送达时间要求的前提下,选择最优的运输方式和路径,使得总成本最低。

非线性整数规划模型(LINGO代码实现)

非线性整数规划模型(LINGO代码实现)

⾮线性整数规划模型(LINGO代码实现)⾮线性整数规划模型LINGO讲解分析:第⼀步:确定决策变量问题是确定调运⽅案,使得总运输费⽤最⼩。

⽽总运输费⽤=货物运量*货物单价,题⽬给了货物单价了,我们求货物运量即可,这⾥的货物运量则是我们的决策变量。

第⼆步:确定⽬标函数和约束条件上图第⼀⾏就是我们的⽬标函数,下⾯三⾏是我们的约束条件,在满⾜约束条件的前提下,软件会不断遍历Xij所有可能的值,然后z也会根据Xij的变化⽽产⽣不同的值,这个时候⽤⼀个min函数取所有可能值当中的最⼩值,即可。

第三步:⽤LINGO代码实现model:title 最少运费问题;sets:!集合的定义,WH是集合的名字,W1..W6是集合的长度,⼀般写成1..6,相当于创建了⼀个能放六个元素的容器WH,是抽象的,是虚⽆的,是⼀种声明,告诉我们“:”后⾯的变量是⼀个什么类型的变量,显然,后⾯的AI是⼀个确确实实有六个数的数组,是具体的,是实在WH/W1..W6/:AI;!集合的名称、集合内的成员、集合的属性(可以看成是与改集合有关的变量或常量,相当与数组);VD/V1..V8/:DJ;links(WH,VD):C,X;!以WH和VD为基础,衍⽣集合。

相当于把两个向量结合在⼀起,形成⼀个⼆维数组,有⾏和列,C和X这两个变量是实在的具体的⼆维数组,只不过后⾯C我们赋值了,X是通过系统根据约束条件和⽬标函数⾃⼰赋值的;endsetsdata:!数据段;AI=60,55,51,43,41,52;DJ=35,37,22,32,41,32,43,38;C=6,2,6,7,4,2,5,94,9,5,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;enddatamin=@sum(links(I,J):c(i,j)*x(i,j)); !⽬标函数.links我们上线提到了,是⼀个6X8的集合名;@for(WH(i):@sum(VD(j):x(i,j))<=AI(I));!约束条件.@for⼀出,你就要知道这⼀⾏写的就是约束条件了;@for(vd(j):@sum(WH(i):x(i,j))=DJ(j));!约束条件.;end。

用Lingo求解整数(0-1)规划模型.

用Lingo求解整数(0-1)规划模型.

Lingo 程序: max=2*x1+5*x2+3*x3+4*x4;
-4*x1+x2+x3+x4>=0; -2*x1+4*x2+2*x3+4*x4>=1; x1+x2-x3+x4>=1; @bin(x1);@bin(x2);@bin(x3);@bin(x4);
温州大学城市学院
例 2 用Lingo软件求解整数规划问题 min z 2 x1 5 x2 3 x3
温州大学城市学院
注意:
Lingo 默认变量的取值从0到正无穷大,
变量定界函数可以改变默认状态.
@free(x): 取消对变量x的限制(即x可取任意实数值)
例 4 求函数 z x 2 y 2 的最小值.
2 2
温州大学城市学院 例 4 求函数 z x 2 y 2 的最小值.
,8
温州大学城市学院
温州大学城市学院
上机作业题
要求:
1、建立数学模型,
2、用lingo循环语句编写程序.
温州大学城市学院
上机作业题
人员安排问题
某城市的巡逻大队要求每天的各个时间段都有一 定数量的警员值班, 以便随时处理突发事件, 每人连续 工作6h, 中间不休息. 如表所示是一天8个班次所需值 班警员的人数情况统计:
成绩 甲 乙 丙 丁 自由泳 / s 56 63 57 55 蛙泳 / s 74 69 77 76 蝶泳 / s 61 65 63 62 仰泳 / s 63 71 67 62
甲, 乙, 丙, 丁 四名队员各自游什么姿势 , 才最有可能取得好成绩?
温州大学城市学院

第5讲 数学规划及Lingo

第5讲 数学规划及Lingo

x1 + x2 ≤ 100 s.t. x1 ≤ 2 x2 x , x ≥ 0为整数 1 2
max=98*x1+277*x2-x1^2-0.3*x1*x2-2*x2^2; x1+x2<100; x1<2*x2; @gin(x1);@gin(x2);
说明: 说明: 1) 变量和行名可以超过8 个字符,但不能超过32 个字 符,且必须以字母开头; 2) LINGO 已假定各变量非负(除非用函数@free或 @sub 或@slb 另行说明); 3) 变量可以放在约束条件的右端(同时数字也可放在约 束条件的左端)。但为了提高效率,应尽可能采用线性 表达式定义目标和约束(如果可能).
集循环函数 集循环函数遍历整个集进行操作。其语法为 @function(setname[(set_index_list)[|conditional_qu alifier]]:expression_list); 1.@for 该函数用来产生对集成员的约束。基于建模语言的标量需 要显式输入每个约束,不过@for函数允许只输入一个约束, 然后LINGO自动产生每个集成员的约 例:产生序列{1,4,9,16,25} model: sets: number/1..5/:x; endsets @for(number(I): x(I)=I^2); end
3.@min和@max 例:求向量[5,1,3,4,6,10]前5 个数的最小值,后3 个数 的最大值。 model: data: N=6; enddata sets: number/1..N/:x; endsets data: x = 5 1 3 4 6 10; enddata minv=@min(number(I) | I #le# 5: x); maxv=@max(number(I) | I #ge# N-2: x); end

讲义:用LINGO解线性规划和整数规划

讲义:用LINGO解线性规划和整数规划

用LINGO 解线性规划和整数规划在工程技术、经济管理、科学研究和日常生活等许多领域中,人们经常遇到的一类决策问题是:在一系列客观或主观限制条件下,寻求使关注的某个或多个指标达到最大(或最小)的决策。

例如:★ 结构设计要在满足强度要求条件下选择材料的尺寸,使其总重量最轻; ★ 资源分配要在有限资源约束下制定各用户的分配数量,使资源产生的总效益最大;★ 运输方案要在满足物资需求和装载条件下安排从各供应点到各需求点的运量和路线,使运输总费用最低;★ 生产计划要按照产品工艺流程和顾客需求,制定原料、零件、部件等订购、投产的日程和数量,尽量降低成本使利润最高。

上述这种决策问题通常称为优化问题。

人们解决这些优化问题的手段大致有以下几种:1.依赖过去的经验判断面临的问题。

这似乎切实可行,并且没有太大的风险,但是其处理过程会融入决策者太多的主观因素,难以客观地加以描述,从而无法确认结果的最优性。

2.做大量的试验反复比较。

这固然比较真实可靠,但是常要花费太多的资金和人力,而且得到的最优结果基本上离不开开始设计的试验范围。

3.用数学建模的方法建立数学规划模型求解最优决策。

虽然由于建模时要作适当的简化,可能使得结果不一定完全可行或达到实际上的最优,但是它基于客观规律和数据,又不需要多大的费用,具有前两种手段无可比拟的优点。

如果在此基础上再辅之以适当的经验和试验,就可以期望得到实际问题的一个比较圆满的回答,是解决这种问题最有效、最常用的方法之一。

1.1.1 数学规划模型数学规划模型一般有三个要素:一是决策变量,通常是该问题要求解的那些未知量,不妨用n 维向量12n x (x ,x ,,x )'= 表示;二是目标函数,通常是该问题要优化(最小或最大)的那个目标的数学表达式,它是决策变量x的函数,这里抽象地记作f(x);三是约束条件,由该问题对决策变量的限制条件给出,即x允许取值的范围x∈Ω,Ω称可行域,常用一组关于x的不等式(也可是等式)g i(x)≤0(I=1,2,…,m)来界定。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
22
§2 LINGO中的集

集是LINGO建模语言的基础,是程序设计 最强有力的基本构件。借助于集,能够用 一个单一的、长的、简明的复合公式表示 一系列相似的约束,从而可以快速方便地 表达规模较大的模型。
23

集是一群相联系的对象,这些对象也称为集的 成员。一个集可能是一系列产品、卡车或雇员。 每个集成员可能有一个或多个与之有关联的特 征,我们把这些特征称为属性。属性值可以预 先给定,也可以是未知的,有待于LINGO求解。 例如,产品集中的每个产品可以有一个价格属 性;卡车集中的每辆卡车可以有一个牵引力属 性;雇员集中的每位雇员可以有一个薪水属性, 也可以有一个生日属性等等。
Model – LINGO1的窗口是LINGO的默认
模型窗口,建立的模型都都要在该窗口内
编码实现。
16

下面举两个例子
例1.1求解前面介绍的LP问题
max Z 2 x1 3 x2 x1 2 x2 8 4 x 16 1 4 x2 12 x1 , x2 0
model: sets: cd/1..6/: a; xd/1..8/: b; links(cd,xd): c, x; endsets min=@sum(links: c*x); @for(xd(j): @sum(cd(i): x(i,j))=b(j));
21
@for(cd(i) @sum(xd(j): x(i,j))<=a(i)); data: a=60 55 51 43 41 52; b=35 37 22 32 41 32 43 38; c= 6 2 6 7 4 2 9 5 49538582 52197433 76739271 23957265 5 5 2 2 8 1 4 3; enddata end
13

Q:这些模型如何求解呢?
我们可以利用LINGO软件进行求解。
14
二 LINGO软件介绍
§1 LINGO入门 当在windows下开始运行LINGO系统时,会 得到类似下面的一个窗口:

15

外层是主框架窗口,包含了所有菜单命令
和工具条,其它所有的窗口将被包含在主
窗口之下。在主窗口内的标题为LINGO

37
如何生成稀疏集? 有两种方式生成:①显式罗列;②设置成 员资格过滤器。 使用前面的例子,显式罗列派生集的成员:

allowed(product,machine,week)/A M 1,A N 2,B N 1/;
38

如果需要生成一个大的、稀疏的集,那么 显式罗列就很讨厌。幸运地是许多稀疏集 的成员都满足一些条件以和非成员相区分。 我们可以把这些逻辑条件看作过滤器,在 LINGO生成派生集的成员时把使逻辑条 件为假的成员从稠密集中过滤掉。

33

如何定义派生集
为了定义一个派生集,必须详细声明: · 集的名字 · 父集的名字 · 可选,集成员 · 可选,集成员的属性 可用下面的语法定义一个派生集: setname(parent_set_list)[/member_list/][:attribute_list];
34

setname是集的名字。parent_set_list是已 定义的集的列表,多个时必须用逗号隔开。 如果没有指定成员列表,那么LINGO会自 动创建父集成员的所有组合作为派生集的 成员。派生集的父集既可以是原始集,也 可以是其它的派生集。
Oct..Jan Oct2001..Jan2002
Oct,Nov,Dec,Jan Oct2001,Nov2001,Dec2001,Ja n2002
32
③ 集成员不放在集定义中,而在随后的数据部分来定 义。 例2.2 sets: students:sex,age; endsets data: students,sex,age= John 1 16 Jill 0 14 Rose 0 17 Mike 1 13; enddata
28

Member_list是集成员列表。如果集成员放 在集定义中,那么对它们可采取显式罗列 和隐式罗列两种方式。如果集成员不放在 集定义中,那么可以在随后的数据部分定 义它们。 ① 当显式罗列成员时,必须为每个成员 输入一个不同的名字,中间用空格或逗号 搁开,允许混合使用。
29
例2.1 可以定义一个名为students的原始集, 它具有成员John、Jill、Rose和Mike,属 性有sex和age: sets: students/John Jill, Rose Mike/: sex, age; endsets
数学规划模型及LINGO讲义
黄志勇 河南科技大学理学院 zyhwan@
一 数学规划引论

数学规划是运筹学中的重要的一个大分支。
所研究的问题来源于军事、经济、管理等
领域的实际问题。

数学规划主要包括线性规划、非线性规划、 整数规划、动态规划、多目标规划等
2

数学规划主要解决两个方面的问题: 一、对于给定的人力、物力和财力,怎样 才能发挥他们的最大效益; 二、对于给定的任务,怎样才能用最少的 人力、物力和财力去完成它。
17
在模型窗口中输入如下代码:
max=2*x1+3*x2; x1+2*x2<=8; 4*x1<=16; 4*x2<=12; 然后点击工具条上的按钮 或者按ctr+s
即可。
18

例1.2 使用LINGO软件计算6个发点8个收
点的最小费用运输问题。产销单位运价表
如下所示:
19
B1 A1 A2 A3 A4 A5 A6 销 量 6 4 5 7 2 5 35

30
② 当隐式罗列成员时,不必罗列出每个集 成员。可采用如下语法: setname/member1..memberN/[:attribute_list];

这里的member1是集的第一个成员名, memberN是集的最末一个成员名。LINGO将 自动产生中间的所有成员名。LINGO也接受 一些特定的首成员名和末成员名,用于创 建一些特殊的集。列表如下:
26
如何定义原始集 为了定义一个原始集,必须详细声明: ·集的名字 ·可选,集的成员 ·可选,集成员的属性 定义一个原始集,用下面的语法: setname[/member_list/][:attribute_list]; 注意:用“[]”表示该部分内容可选。

27

Setname是你选择的来标记集的名字,最 好具有较强的可读性。集名字必须严格符 合标准命名规则:以拉丁字母或下划线 (_)为首字符,其后由拉丁字母(A— Z)、下划线、阿拉伯数字(0,1,„,9) 组成的总长度不超过32个字符的字符串, 且不区分大小写。
8

对于如此简单的线性规划问题可以利用图 解法、单纯形法等求得最优解。也可以利 用LINDO、LINGO等软件求解。
9
Q:数学建模竞赛中所建模型会简单么? 显然是不可能的。 如果建模中建立的是规划模型,那肯定是 综合的规划模型。

10
借助上面的例子,可以有以下几种变形: 整数规划模型:

max Z 2 x1 3x2 x1 2 x2 8 4x 16 1 4 x2 12 x1 , x2 0,且取整
11

非线性规划模型:
max Z 2 x12 3x2 x1 2 x2 8 4 x 16 1 4 x2 12 x1 , x2 0
39
例2.4 sets: students/John,Jill,Rose,Mike/:sex,age; linkmf(students,students)|sex(&1) #eq# 1 #and# sex(&2) #eq# 0: friend; linkmf2(linkmf) | friend(&1,&2) #ge# 0.5 : x; endsets data: sex,age = 1 16 0 14 0 17 0 13; friend = 0.3 0.5 0.6; enddata
24
LINGO有两种类型的集:原始集 (primitive set)和派生集(derived set)。 一个原始集是由一些最基本的对象组成的。 一个派生集是用一个或多个其它集来定义 的,也就是说,它的成员来自于其它已存 在的集。

25

集部分是LINGO模型的一个可选部分。在 LINGO模型中使用集之前,必须在集部分 事先定义。集部分以关键字“sets:”开始, 以“endsets”结束。一个模型可以没有集 部分,或有一个简单的集部分,或有多个 集部分。一个集部分可以放置于模型的任 何地方,但是一个集及其属性在模型约束 中被引用之前必须定义了它们。
31
隐式成员列表格式
示例
所产生集成员
1..n
StringM..StringN DayM..DayN
1..5
Car2..car14 Mon..Fri
1,2,3,4,5
Car2,Car3,Car4,…,Car14 Mon,Tue,Wed,Thu,Fri
MonthM..MonthN MonthYearM..MonthYearN
ห้องสมุดไป่ตู้35
例2.3 sets: product/A B/; machine/M N/; week/1..2/; allowed(product,machine,week):x; endsets

36
成员列表被忽略时,派生集成员由父集成 员所有的组合构成,这样的派生集成为稠 密集。 如果限制派生集的成员,使它成为父集成 员所有组合构成的集合的一个子集,这样 的派生集成为稀疏集。
相关文档
最新文档