学习LINGO语言课件.ppt

上传人:za****8 文档编号:15877034 上传时间:2020-09-11 格式:PPT 页数:151 大小:795.74KB
收藏 版权申诉 举报 下载
学习LINGO语言课件.ppt_第1页
第1页 / 共151页
学习LINGO语言课件.ppt_第2页
第2页 / 共151页
学习LINGO语言课件.ppt_第3页
第3页 / 共151页
资源描述:

《学习LINGO语言课件.ppt》由会员分享,可在线阅读,更多相关《学习LINGO语言课件.ppt(151页珍藏版)》请在装配图网上搜索。

1、2020年9月11日星期五10时6分33秒,LINGO,数学科学与技术学院 杨云峰 密码:654321,2020年9月11日星期五10时6分33秒,一. 优化模型与优化软件简介,二. LINGO软件的基本使用方法,Outline,三. LINGO程序流程控制和子模型,2020年9月11日星期五10时6分33秒,一. 优化模型与优化软件简介,2020年9月11日星期五10时6分33秒,优化问题的一般形式,无约束优化: 只有目标函数, 没有约束条件 有约束优化: 目标函数和约束条件都有 普通方程组:没有(1)(3), 只有(2) 不等式方程组:没有(1)(2), 只有(3),2020年9月11日星

2、期五10时6分33秒,优化类型,连续优化 : 全部决策变量取值均 为连续数值 (实数) 离散优化 : 部分或全部决策变量 只取离散数值,2020年9月11日星期五10时6分33秒,连续优化,线性规划(LP) 目标和约束均为线性函数 非线性规划(NLP) 目标或约束中有非线性函数 二次规划(QP) 目标为二次函数、 约束为线性,2020年9月11日星期五10时6分33秒,离散优化,整数规划(IP) 决策变量(全部或部分)为整数,整数线性规划(ILP),整数非线性规划(INLP) 纯整数规划(PIP), 混合整数规划(MIP) 一般整数规划,0-1(整数)规划,2020年9月11日星期五10时6分

3、33秒,常用优化软件,LINDO/LINGO软件 MATLAB优化工具箱/mathematica优化程序包 EXCEL软件的优化功能 SAS(统计分析)软件的优化功能,2020年9月11日星期五10时6分33秒,建模时需要注意的几个基本问题,1、尽量使用实数优化,减少整数约束和整数变量 2、尽量使用光滑优化,减少非光滑约束的个数 如:尽量少使用绝对值、符号函数、多个变量求最大/最小值、四舍五入、取整函数等,2020年9月11日星期五10时6分33秒,建模时需要注意的几个基本问题,3、尽量使用线性模型,减少非线性约束和非线性变量的个数 (如x/y 5 改为x5y) 4、合理设定变量上下界,尽可能

4、给出变量初始值 5、模型中使用的参数数量级要适当(如小于103),2020年9月11日星期五10时6分33秒,二. LINGO软件的基本使用方法,2020年9月11日星期五10时6分33秒,1 LINGO入门,2020年9月11日星期五10时6分33秒,max 2x1+3x2 St. 4x1+3x2=10 3x1+5x2=12 x10 x20,设有数学模型如下:,2020年9月11日星期五10时6分33秒,第一步:启动Lingo,屏幕显示如下: 标记LINGO的外窗口是主框架窗口,主框架窗口的上面包含所有的命令菜单和命令工具栏; 标记LINGO MODEL-LINGO1的子窗口是一个新的、空白

5、的模型窗口。,2020年9月11日星期五10时6分33秒,第二步:在模型窗口中输入模型,model: max = 2*x1+3*x2; 4*x1+3*x210; 3*x1+5*x212; end,Max 2x1+3x2 St. 4x1+3x2=10 3x1+5x2=12 x10 x20,2020年9月11日星期五10时6分33秒,第三步:求解模型,1)选择菜单 LINGO|Solve 或者按工具栏的,2020年9月11日星期五10时6分33秒,2)LINGO开始编译模型,如有语法错误将返回一个错误的消息并指明错误出现的位置;如果通过编译, LINGO将激活 Solver运算器 寻求模型的最优解

6、;,2020年9月11日星期五10时6分33秒,3)首先出现solver status 窗口,其作用是监控solver的进展和显示模型的维数等信息;,2020年9月11日星期五10时6分33秒,Solver Status 窗口,2020年9月11日星期五10时6分33秒,4)计算完成后出现Solution Report 窗口显示模型解的详细信息;,2020年9月11日星期五10时6分33秒,Solution Report 窗口,Global optimal solution found at iteration: 2 Objective value: 7.454545 Variable Val

7、ue Reduced Cost x1 1.272727 0.000000 x2 1.636364 0.000000 Row Slack or Surplus Dual Price 1 7.454545 1.000000 2 0.000000 0.9090909E-01 3 0.000000 0.5454545,2020年9月11日星期五10时6分33秒,Reduced Cost:,在max模型中: 相应变量的 reduced cost值表示当该变量每增加一个单位时目标函数减少的量。 本例中此值均为0,2020年9月11日星期五10时6分33秒,Reduced Cost:,Reduced Cos

8、t 值列出最优单纯形表中判别 数所在行的变量的系数,表示当变量有微 小变动时,目标函数的变化率。其中基变 量的reduced cost值应为0, 对于非基变量 Xj, 相应的reduced cost值表示当某个变 量Xj 增加一个单位时目标函数减少的量 ( max型问题)。本例中此值均为0。,2020年9月11日星期五10时6分33秒,SLACK OR SURPLUS:,给出约束条件的松驰变量或剩余变量的值; 小于等于约束为松驰变量(SLACK); + 大于等于约束为剩余变量(SURPLUS); -,2020年9月11日星期五10时6分33秒,DUAL PRICES:对偶价格或影子价格,DUA

9、L PRICES表示当对应约束有微 小变动时,目标函数的变化率,即约束条 件右端的常数项每增加一个单位,目标函 数相应获得的改变量。 显然,如果在最优解处约束正好取等号 (紧约束),该值才可能不是0;对于非紧 约束对该值必为0,表示对应约束中不等式 右端项的微小扰动不影响目标函数。,2020年9月11日星期五10时6分33秒,2 Lingo的基本用法注意事项,2020年9月11日星期五10时6分33秒,1)每一个模型都以 model: 开始, 又以 end 结束,也可省略此结构;,2020年9月11日星期五10时6分33秒,2)目标函数必须由 min = 或 max = 开头。,2020年9月

10、11日星期五10时6分33秒,3)可以用表示=;,Lingo无严格小于,欲使ab, 可以适当选取小的正常数e 表示成a+eb,,2020年9月11日星期五10时6分33秒,4) LINGO的每一语句以 ; 结束;,5) 注释 以 ! 开始, 以 ; 结束;,2020年9月11日星期五10时6分33秒,变量名:.不区分大小写.由字母数字下划线组成.第一个字符必须是字母.变量名最长为32个字符,2020年9月11日星期五10时6分33秒,LINGO编辑器用 蓝色显示LINGO关键字 绿色显示注释 其他文本用黑色 匹配的括号用红色高亮度显示,2020年9月11日星期五10时6分33秒,8) 变量和数

11、字放在约束条件的左、右端均可;但最好变量在左,数字在右。,9) Lingo 变量默认域为非负实数,可以改变默认域.,2020年9月11日星期五10时6分33秒,10)行名 name例:Objectivemax=2*x+3*y;Con1 4*x+3*y10;Con2 3*x+5*y12;线性规划(行名).lg4默认为1,2,3,2020年9月11日星期五10时6分33秒,Global optimal solution found. Objective value: 7.454545 Total solver iterations: 2 Variable Value Reduced Cost X

12、1.272727 0.000000 Y 1.636364 0.000000 Row Slack or Surplus Dual Price OBJECTIVE 7.454545 1.000000 CON1 0.000000 0.9090909E-01 CON2 0.000000 0.5454545,2020年9月11日星期五10时6分33秒,3 LINGO的建模语言,2020年9月11日星期五10时6分33秒,以运输实例逐步分析,6个仓库向8个小贩供应同一种货物, 如何运,总运输费用最小?,注:每个仓库可以向每个小贩供货 ,一共48个可能运货路线。,仓库货存量、小贩需求量、每条路线的单位运输费

13、用三个表如下:,2020年9月11日星期五10时6分33秒,仓库货存量:capacity,2020年9月11日星期五10时6分33秒,小贩需求量:demand,2020年9月11日星期五10时6分33秒,每单位货物运输费用表:cost,2020年9月11日星期五10时6分33秒,demand_j 表示第j个小贩的需求量 capacity_i 表示第i个仓库的库存量 cost_i_j 表示从第i个仓库到第j个小贩的单位运输费用,volume_i_j 表示从第i个仓库到第j个小贩的运输量,2020年9月11日星期五10时6分33秒,数学模型可表示如下:,2020年9月11日星期五10时6分33秒,

14、当然目标函数可以如下输入: min = 6 * volume_1_1 + 2 * volume_1_2 + 6 * volume_1_3 + . 1 * volume_6_6 + 4 * volume_6_7 + 3 * volume_6_8;,2020年9月11日星期五10时6分33秒,但是较大模型如果像上面那样 输入又费时,又容易出错! 这就需要LINGO的建模语言,2020年9月11日星期五10时6分33秒,LINGO的建模语言优点:,1)可以用类似于标准数学符号的方式 表示你的模型; 2)可以用一个紧凑的语句表示一系列 约束。 3)数据可独立于模型:LINGO可以从 文本文件、电子数据

15、表、数据库中读 取数据。,2020年9月11日星期五10时6分33秒,LINGO模型的构成:5个段,目标函数与约束条件段 集合段(sets: endsets) 数据段(data: enddata) 初始段(init: endinit) 计算段(calc: endcalc),Lingo建模语言的重点和难点是: 对集合概念的理解和正确使用,2020年9月11日星期五10时6分33秒,为什么使用集合,集合是LINGO建模语言的基础,是LINGO程序设计最强有力的基本构件。借助于集合,能够用一个单一的、长的、简明的复合公式表示一系列相似的约束,从而可以快速方便地表达规模较大的模型。,2020年9月11

16、日星期五10时6分33秒,什么是集合,集合是一群相联系的对象,比如 仓库、小贩、运输路线,这些对象也 称为集合的成员。每个集合成员可能 有一个或多个与之有关联的特征,我 们把这些特征称为属性。 属性值可以预先给定,也可以是 未知的,有待于LINGO求解。,2020年9月11日星期五10时6分33秒,从我们的数学模型看需要三个集合:,(1)仓库-6个成员-货存量 (2)小贩-8个成员-需求量 (3)运输路线-48个成员 -单位运费和运货量,2020年9月11日星期五10时6分33秒,LINGO有两种类型的集合,原始集合(primitive set):由一些 最基本的对象组成的。 派生集(deri

17、ved set): 用一个或多 个其它集来定义的,也就是说,它 的成员来自于其它已存在的集。,2020年9月11日星期五10时6分33秒,*下面我们学习集合定义部分*,1. 以sets:开始,以endsets结束; sets: endsets,2020年9月11日星期五10时6分33秒,2. 原始集合定义法:,setname /member_list/ :attribute_list ; 。setname是集合的名字; 。member_list是成员列表,各成员之间可用 空格或逗号分隔; 。attribute_list是集合成员所具有的属性列 表,多个属性之间用逗号分隔; 。原始集合的memb

18、er_list, attribute_list是可选项;,2020年9月11日星期五10时6分33秒,*仓库和小贩的集合可如下定义*,sets: warehouses / w1 w2 w3 w4 w5 w6 /: capacity; vendors / v1,v2,v3,v4,v5,v6, v7,v8 / : demand; endsets,2020年9月11日星期五10时6分33秒,*成员较多时,可使用隐式成员列表,setname /member1.memberN/ :attribute_list;,2020年9月11日星期五10时6分33秒,数字型 字符数字型 星期型 月份型 年份-月份型

19、,*隐式成员列表类别*,2020年9月11日星期五10时6分33秒,(1)数字型,1.n 例:1.5 (1,2,3,4,5),(2)字符数字型,stringM.stringN 例: truck3.truck34,2020年9月11日星期五10时6分33秒,(3)星期型,dayM.dayN 例:mon.fri (Mon, Tue, Wed, Thu, Fri),(4)月份型,MonthM.MonthN 例:OCT.JAN (Oct, Nov, Dec, Jan),2020年9月11日星期五10时6分33秒,(5)年份-月份型,monthYearM.monthYearN 例:OCT2001.JAN

20、2002 (2001.10 2001.11 2001.12 2002.1),2020年9月11日星期五10时6分33秒,*仓库和小贩的集合也可如下定义*,sets: warehouses / w1.w6/: capacity; vendors / v1.v8 /: demand; endsets,2020年9月11日星期五10时6分33秒,3. 派生集合定义法:,setname (parent_set_list) /member_list/ :attribute_list; parent_set_list是父集合名列表,2020年9月11日星期五10时6分33秒,*48条运输路线集合定义*,l

21、inks(warehouses,vendors) : cost, volume;,2020年9月11日星期五10时6分33秒,*三个集合定义如下*,sets: warehouses / wh1.wh6 /: capacity; vendors / v1.v8 /: demand; links( warehouses, vendors): cost,volume; endsets,2020年9月11日星期五10时6分33秒,运输问题的三个集合说明:,这段代码定义了4个属性值,在接下来的模型中就可以使用属性值capacity(1),capacity(2),capacity(6); demand(1

22、),demand(2) ,demand(8); cost(1,1), cost(1,2) , cost(1,8) , cost(2,1), cost(2,2) , cost(2,8) , cost(6,1), cost(6,2) , cost(6,8); volume的引用同cost。,2020年9月11日星期五10时6分33秒,4.集合成员过滤:,trucks/1.100/:capacity; heavy_duty (trucks) | capacity( endsets,如果想赋值 x(1)=1, x(2)=2, x(3)=3, y(1)=4,y(2)=5, y(3)=6, 则数据段可以为

23、,2020年9月11日星期五10时6分33秒,data: x=1,2,3; y=4 5 6; enddata,data: x,y=1 4 2 5 3 6; enddata,多个数据之间可用逗号或空格分隔,2020年9月11日星期五10时6分33秒,若成员属性值相同,数据段定义如下:,data: x=3; !(所有成员的x=3); y=6; !(所有成员的y=6); enddata,2020年9月11日星期五10时6分33秒,也可以在运行时输入属性值:,data: x=?; !(运行时输入所有成员的x值); y=6; enddata,2020年9月11日星期五10时6分33秒,*运输问题的数据部

24、分*,data: capacity=60,55,51,43,41,52; demand=35 37 22 32 41 32 43 38;,2020年9月11日星期五10时6分33秒,cost = 6 2 6 7 4 2 5 9 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,2020年9月11日星期五10时6分33秒,sets: sett : x, y ; endsets data: sett, x, y = a 1 4 b 2 5 c 3 6; enddata,s

25、ets: sett/a,b,c/ : x, y ; endsets data: x =1 2 3; y=4 5 6; enddata,集合成员可以在数据段定义:,2020年9月11日星期五10时6分33秒,运输实例:,sets: warehouses: capacity; endsets data: !可以写成warehouses =w1.w6; !也可以同时定义集合成员列表和属性值; warehouses, capacity= w1 60,w2 55, w3 51,w4 43, w5 41,w6 52; enddata,2020年9月11日星期五10时6分33秒,* 初始化定义*,只在非线性

26、规划中使用,指定初 始值。 init: . endinit,2020年9月11日星期五10时6分33秒,例: init: x=0.999; y=0.002; endinit y=log(x); x2+y2=1; 给了恰当的初始值,会减少运算时间。,2020年9月11日星期五10时6分33秒,*计算段定义*,calc: . . . endcalc,计算段的作用: 在模型输入后,LINGO开始正式求解模型之前对原始数据进行一定的计算,得到我们模型中要使用的部分数据。,2020年9月11日星期五10时6分33秒,一个简单的计算段例子:,model: data: x,y,z = 1, 2, 3; en

27、ddata calc: avg = ( x + y + z) / 3; endcalc end,2020年9月11日星期五10时6分33秒,*目标函数和约束条件段*,LINGO提供了集合循环函数和集合操作 函数使得目标函数和约束条件的书写如同 数学公式那样简单。,四个集合循环函数,FOR、SUM 、 MAX、MIN,2020年9月11日星期五10时6分33秒,sum ( setname ( set_index_list) | condition : expression );,求和,2020年9月11日星期五10时6分33秒,*运输问题的目标函数*,min = sum( links ( i,

28、j) : cost( i, j) * volume( i, j) );,min = sum( links : cost* volume );,2020年9月11日星期五10时6分33秒,*运输问题实例中的求和*,!从6个仓库发到第j个小贩的货物量总和; sum( warehouses(i) : volume(i, j) );,2020年9月11日星期五10时6分33秒,从第i个仓库发出到8个小贩的货物量总和;,sum( vendors(j) : volume( i , j ) ),2020年9月11日星期五10时6分33秒,for ( setname ( set_index_list) | c

29、ondition : expression_list );,生成约束for,对集合setname中的每个成员独立地生成约束,约束由约束表达式列表expression_list描述; 多个表达式之间用分号相隔。,2020年9月11日星期五10时6分33秒,*每个小贩的需求约束*,!(要求6个仓库发给每个小贩的货物总量=小贩的需求量); for( vendors(j) : sum( warehouses( i): volume( i, j) ) =demand( j) );,2020年9月11日星期五10时6分33秒,*每个仓库的供货约束*,for( warehouses( i) : sum( v

30、endors(j) : volume( i, j) ) capacity( i) );,!(要求每个仓库发给8个小贩的 货物总量仓库的货存量);,2020年9月11日星期五10时6分33秒,*运输问题的完整模型,运输问题.lg4,2020年9月11日星期五10时6分33秒,返回集合setname上的表达式expression的最大值,max ( setname ( set_index_list) | condition : expression );,2020年9月11日星期五10时6分33秒,min ( setname ( set_index_list) | condition : expr

31、ession); 返回集合setname上的表达式expression的最小值,2020年9月11日星期五10时6分33秒,返回数据集setname中成员 element的位置号 (下标),*集合操作函数*,index ( setname, element ),2020年9月11日星期五10时6分33秒,model: sets: girls/debbie,sue,alice/:; boys/bob,joe,sue,fred/:; endsets calc: x=index(boys,sue); y=index(sue); endcalc end,2020年9月11日星期五10时6分33秒,in

32、( set_name, primitive_index_1 ,primitive_index_2 ),如果数据集set_name中包含成员primitive_index_1则返回1,否则 返回0。,2020年9月11日星期五10时6分33秒,例:,model: sets: plants / a,b,c,d /: ; closed(plants) / b /: ; open(plants) | #not# in(closed, enddata end,2020年9月11日星期五10时6分33秒,例2:,model: sets: s1/a b c/:; s2/x y z/:; s3(s1,s2)/

33、a,x a,z b,y c,z/: ; endsets calc: x=in(s3,index(s1,b), index(s2,y) ); endcalc end,本例要判断集合s3中是否包含元素(b,y),运行LINGO|SOLVE得到x=1,说明包含。,2020年9月11日星期五10时6分33秒,wrap(index,limit) 当index位于区间1,limit时返回index,否则返回j=index-k*limit,其中j位于区间1,limit,2020年9月11日星期五10时6分33秒,职员时序安排模型,一项工作一周7 天都需要有人(比如 护士工作),每天(周一至周日)所需的 最少

34、职员数为20、16、13、16、19、14 和 12,并要求每个职员一周连续工作5 天, 试求每周所需最少职员数,并给出安排。 注意这里我们考虑稳定后的情况。,2020年9月11日星期五10时6分33秒,sets: days/mon.sun/: required,start; endsets data: required = 20 16 13 16 19 14 12; enddata min=sum(days: start); !最小化每周所需职员数; for(days(j): sum( days(i) | i #le# 5: start( wrap(j+i+2,7 ) ) ) = requi

35、red(j) );,2020年9月11日星期五10时6分33秒,size(setname),返回集合setname中所包含的成员 个数。,2020年9月11日星期五10时6分33秒,第二章 LINGO与其它软件交换数据,2020年9月11日星期五10时6分33秒,拷贝、粘贴,From Exel,Pastefromexel.lg4,2020年9月11日星期五10时6分33秒,输入输出函数,用来与外部数据源连接 text()、 ole()、 file()、odbc()、 dual(),2020年9月11日星期五10时6分33秒,file( filename ),在模型的集合和数据部分使用, 从文本

36、 文件输入数据.,2020年9月11日星期五10时6分33秒,sets: warehouses / file( 1.txt) / : capacity; vendors / file( 1.txt ) / : demand; links( warehouses, vendors) : cost, volume; endsets,运输实例的数据可以从文本文件输入:,2020年9月11日星期五10时6分33秒,data: capacity = file( 1.txt ); demand = file( 1.txt ); cost = file( 1.txt ); enddata,1.txt文件内容

37、 1.txt,2020年9月11日星期五10时6分33秒,text( filename ),在模型的数据部分使用, 向文本 文件输出数据.,Outputtotext.lg4,2020年9月11日星期五10时6分33秒,ole( spreadsheet_file ,range_name_list ),在模型的数据和集合部分使用, 与excel交换数据,2020年9月11日星期五10时6分33秒,运输实例的数据可以从Excel输入:,sets: warehouses: capacity; vendors : demand; links( warehouses, vendors) : cost, v

38、olume; endsets,2020年9月11日星期五10时6分33秒,data: warehouses, vendors, capacity, demand, cost = ole ( 2.xls, warehouses, vendors, capacity, demand, cost );enddata,2020年9月11日星期五10时6分33秒,在Excel中定义单元格范围名称的方法:, 按鼠标左键拖曳选择单元格范围, 释放鼠标按钮, 选择“插入|名称|定义”, 输入希望的名字, 点击“确定”按钮。,2020年9月11日星期五10时6分33秒,2.xls从Excel输入数据.lg4,2

39、020年9月11日星期五10时6分33秒,odbc(data_source, table_name, col_1, col_2 . ),在模型的数据部分使用,与数据库进行数据传输,2020年9月11日星期五10时6分33秒,运输实例的数据可以从数据库输入:,sets: warehouses: capacity; vendors : demand; links( warehouses, vendors) : cost, volume; endsets,2020年9月11日星期五10时6分33秒,data: warehouses, capacity= odbc(); vendors, demand

40、= odbc(); links,cost = odbc(); odbc()=volume; enddata,2020年9月11日星期五10时6分33秒,trans.mdb与数据库的数据传递.lg4,2020年9月11日星期五10时6分33秒,第三章 LINGO的内部函数,2020年9月11日星期五10时6分33秒,1. 标准运算符,算术运算符: * / + -,逻辑运算符: #EQ# #NE# #GE# #GT# #LE# #LT# #NOT# #AND# #OR#,2020年9月11日星期五10时6分33秒,关系运算符: = = 可以用表示=或,2020年9月11日星期五10时6分33秒,运

41、算符的优先级,2020年9月11日星期五10时6分33秒,lingo变量默认域为非负实数 free(variable) 取消默认域,使变量可以取任意实数 gin(variable) 限制变量取整数值 bin(variable) 限制变量取值为0,1 bnd(low,variable,up) 限制变量于一个有限的范围,3. 变量界定函数,2020年9月11日星期五10时6分33秒,练习1,x1=2, x2 =3, Z*17,练习1,2020年9月11日星期五10时6分33秒,练习2,X1=1 X2=0 X3=1 Z=8,练习2,2020年9月11日星期五10时6分33秒,abs(x)、cos(x

42、)、sin(x) 、 tan(x) 、exp(x) 、sign(x) floor(x) (返回x的整数部分) smax(x1,x2,xn) (返回x1,x2,xn的最大值) smin(x1,x2,xn),4. 数学函数,2020年9月11日星期五10时6分33秒,5. 条件控制,if ( logical_condition, true_result, false_result ) 计算logical_condition,若真 返回true_result 否则返回false_result.,2020年9月11日星期五10时6分33秒,7个选项卡(可设置80-90个控制参数),2020年9月11日

43、星期五10时6分33秒,范例,2020年9月11日星期五10时6分33秒,整数规划 整数规划.lg4,2020年9月11日星期五10时6分33秒,二次规划的例子(lingo).lg4,2020年9月11日星期五10时6分33秒,递规调用.lg4,已知 ,求a7,2020年9月11日星期五10时6分33秒,学习方法: (1)上课各位老师讲的每个有数据的规划 模型上机用lingo语言实践; (2) LINGO 的help下有一项 Additional Examples of LINGO Modeling,可以仔细研究每个例子的 模型。,2020年9月11日星期五10时6分33秒,某车间有甲、乙两台

44、机床,可用于加工三种工件。假定这两台车床的可用台时数分别为800和900,三种工件的数量分别为400、600和500,且已知用三种不同车床加工单位数量不同工件所需的台时数和加工费用如下表。问怎样分配车床的加工任务,才能既满足加工工件的要求,又使加工费用最低?,练习3,2020年9月11日星期五10时6分33秒,练习3,2020年9月11日星期五10时6分33秒,解1 设在甲车床上加工工件1、2、3的数量为x1、x2、x3,在乙车床上加工工件1、2、3的数量分别为x4、x5、x6。可建立以下线性规划模型:,2020年9月11日星期五10时6分33秒,解2,设在甲车床上加工工件i的数量为x(i),

45、 单位工件所需加工台时数为timex(i), 单位工件的加工费用为costx(i), 在乙车床上加工工件i的数量为y(i), 单位工件所需加工台时数为timey(i) 单位工件的加工费用为costy(i) 工件i的加工数量为demand(i),2020年9月11日星期五10时6分33秒,数学模型,2020年9月11日星期五10时6分33秒,Lingo建模,sets: Chechuang/1.3/ :costx,costy, timex,timey,x,y,demand; endsets,2020年9月11日星期五10时6分33秒,Lingo建模,min=sum( chechuang : cos

46、tx*x+costy*y ) sum(chechuang:timex*x)800; sum(chechuang:timey*y)900; for(chechuang:x+y=demand); for(chechuang:gin(x);gin(y);,2020年9月11日星期五10时6分33秒,data: costx=13,9,10; costy=11,12,8; timex=0.4,1.1,1; timey=0.5,1.2,1.3; demand=400,600,500; enddata,练习3,2020年9月11日星期五10时6分33秒,Lingo-Generate-Display mode

47、l,MODEL: _1 MIN= 13 * X_1 + 11 * Y_1 + 9 * X_2 + 12 * Y_2 + 10 * X_3 + 8 * Y_3 ; _2 0.4 * X_1 + 1.1 * X_2 + X_3 = 800 ; _3 0.5 * Y_1 + 1.2 * Y_2 + 1.3 * Y_3 = 900 ; _4 X_1 + Y_1 = 400 ; _5 X_2 + Y_2 = 600 ; _6 X_3 + Y_3 = 500 ; GIN( X_1); GIN( Y_1); GIN( X_2); GIN( Y_2); GIN( X_3); GIN( Y_3); END,20

48、20年9月11日星期五10时6分33秒,练习4-求S到T的最短路,2020年9月11日星期五10时6分33秒,model: sets: cities/s,a1,a2,a3, b1,b2,c1,c2,t/:l; roads(cities,cities)/ s,a1 s,a2 s,a3 a1,b1 a1,b2 a2,b1 a2,b2 a3,b1 a3,b2 b1,c1 b1,c2 b2,c1 b2,c2 c1,t c2,t/:d; endsets,2020年9月11日星期五10时6分33秒,data: d=6 3 3 6 5 8 6 7 4 6 7 8 9 5 6; enddata,2020年9月

49、11日星期五10时6分33秒,l(1)=0; for(cities(i) | i#gt#index(s) : l(i)=min( roads(j,i) : l(j)+d(j,i); end,最短路.lg4,2020年9月11日星期五10时6分33秒,三. LINGO程序流程控制和子模型,2020年9月11日星期五10时6分33秒,1、程序流程控制,条件分支控制 条件循环控制,2020年9月11日星期五10时6分33秒,条件分支控制,1、ifc 或 ifc /else 语句 2、其基本的使用语法是: ifc( condition :可执行语句1; else 可执行语句2; ) 其中conditi

50、on 是一个逻辑表达式(表示相应的条件),当condition 的逻辑值为“真(条件成立)时,程序执行语句1;否则程序执行语句2。,2020年9月11日星期五10时6分33秒,条件分支控制,请读者注意,ifc 函数和以前用过的if 函数的功能是不同的: ifc 是引导流程控制语句的函数(按照不同条件选择不同的程序分支进行执行),而 if 一个算术函数,按照不同条件返回不同的计算结果或表达式。,2020年9月11日星期五10时6分33秒,条件循环控制,在LINGO 10.0 以上版本中,有两种条件循环控制语句:for和while。 while语句的使用语法是: while(condition:

51、可执行语句;) 当逻辑表达式condition为“真”时,执行相应的一条或多条可执行语句(多条之间用分号分隔),直到condition的值为假为止。 请注意,while条件循环控制语句只能出现在计算段(calc)中。,2020年9月11日星期五10时6分33秒,条件循环控制,在条件循环控制中,还经常会使用到 break: 不需要任何参数,其功能是立即终止当前循环,继续执行当前循环外的下一条语句。 pause( message): 暂停程序执行,并弹出一个窗口,等待用户选择继续执行或者终止程序。 stop( message): 终止程序的运行,并弹出一个窗口,说明程序已经停止运行。,2020年9

52、月11日星期五10时6分33秒,二分法查找数据,采用二分搜索算法,从一个递增排列的正整数数列X 中找到某个具体的数KEY 在数列X 中所在的位置 二分法查找.lg4,2020年9月11日星期五10时6分33秒,2、子模型,子模型必须包含在主模型之内,即必须位于以“model:”开头、以“end”结束的模块内。 同一个主模型中,允许定义多个子模型,所以每个子模型本身必须命名, 子模型定义: submodel mymodel: 可执行语句(约束+目标函数); endsubmodel 其中 mymodel 是该子模型的名字,可执行语句不可以有自身单独的集合段、数据段、初始段和计算段。也就是说,同一个主模型内的变量都是全局变量,这些变量对主模型和所有子模型同样有效。,2020年9月11日星期五10时6分33秒,2、子模型,子模型调用: solve( submodel_name, , submodel_name_n) 参数可以是多个子模型的名字,即同时求解多个子模型。也可以没有参数,如果没有参数则求解出现在语句“solve();”之前的所有子模型。,2020年9月11日星期五10时6分33秒,1个子模型.lg4 4个子模型.lg4,子模型调用例子,

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!