540 likes | 673 Views
请同学们掌握调课的方法 课程只能在一周之内调动,即不能把本周的课调到下周。 第五次课也是课堂作业,望同学们要预习一下。仓促做作业,效果很差。 系统的问题,我们会逐步解决。. 系统可自由进行课堂调整. 第一步,登陆试验管理系统,点击“预约明细”,点击“大学数学实验”. 第二步,在调整的项目后点击“删除”,弹出窗口. 第三步,在周次后点击“第四周”(原时间在哪周就调整到哪周),弹出窗口. 第四步,点击可选课堂,在弹出窗口下面选择实验室。点击窗口下方的“确定”以及弹出的提示窗口的“确定”。.
E N D
请同学们掌握调课的方法 课程只能在一周之内调动,即不能把本周的课调到下周。 第五次课也是课堂作业,望同学们要预习一下。仓促做作业,效果很差。 系统的问题,我们会逐步解决。
系统可自由进行课堂调整 • 第一步,登陆试验管理系统,点击“预约明细”,点击“大学数学实验”
第二步,在调整的项目后点击“删除”,弹出窗口第二步,在调整的项目后点击“删除”,弹出窗口
第三步,在周次后点击“第四周”(原时间在哪周就调整到哪周),弹出窗口第三步,在周次后点击“第四周”(原时间在哪周就调整到哪周),弹出窗口
第四步,点击可选课堂,在弹出窗口下面选择实验室。点击窗口下方的“确定”以及弹出的提示窗口的“确定”。第四步,点击可选课堂,在弹出窗口下面选择实验室。点击窗口下方的“确定”以及弹出的提示窗口的“确定”。 • 第五步,再次点击“预约明细”,点击“大学数学实验”,才能查看修改后的信息
优化软件LINGO使用入门 Lingo12初步
傻瓜输入法 2 “段”的使用 3 程序结构与调试 5 -LINGO入门- 初始印象 1 数据交换 4
-初始印象- • 界面介绍 • 工具栏 • 文件类型 • 运行过程 • 求解器状态窗口 • 求解报告窗口
-界面介绍- • LINGO软件的主窗口(用户界面),所有其他窗口都在这个窗口之内。 • 当前光标的位置 • 模型窗口(Model Window),用于输入LINGO优化模型(即LINGO程序)。 • 状态行(最左边显示“Ready”,表示 “准备就绪”) • 当前时间
-工具栏- File|Open (F3) 打开文件 Edit|Copy (Ctrl+C) 复制 Window|Close All (Alt+X) 关闭所有窗口 Edit|Find (Ctrl+F) 查找 Edit|Match Parenthesis (Ctrl+P) 匹配括号 LINGO|Options (Ctrl+I) 选项设置 File|Print (F7) 打印文件 Edit|Undo (Ctrl+Z) 取消操作 Help|Contents(F1) 在线帮助 LINGO|Solution (Alt+O)显示解答 File|Save (F4) 保存文件 • Edit | Go To Line • (Ctrl+T) • 定位某行 Edit|Paste (Ctrl+V) 粘贴 LINGO|Picture (Ctrl+K) 模型图示 Window|Tile (Alt+T) 平铺窗口 LINGO|Solve (Ctrl+S) 求解模型 Window|Send to Back (Ctrl+B) 窗口后置 Edit|Redo (Ctrl+Y) 恢复操作 File|New (F2) 新建文件 上下文相关的帮助 Edit|Cut (Ctrl+X) 剪切
-文件类型- • .LG4:LINGO格式的模型文件,保存了模型窗口中所能够看到的所有文本和其他对象及其格式信息; • .LNG:文本格式的模型文件,不保存模型中的格式信息(如字体、颜色、嵌入对象等); • .LDT:LINGO数据文件; • .LTF:LINGO命令脚本文件; • .LGR:LINGO报告文件; • .LTX: LINDO格式的模型文件; • .MPS:示MPS(数学规划系统)格式的模型文件。 除“LG4”文件外,另外几种格式的文件都是普通的文本文件,可以用任何文本编辑器打开和编辑。
-运行过程- 1. 确定常数 2. 识别类型 LINDO/LINGO预处理程序 LP QP NLP IP 全局优化(选) ILP IQP INLP 分枝定界管理程序 线性优化求解程序 非线性优化求解程序 1.顺序线性规划法(SLP) 2.广义既约梯度法(GRG) (选) 3.多点搜索(Multistart) (选) 1. 单纯形算法 2. 内点算法barrier(选)
-求解器状态窗口- LP,QP,ILP,IQP,PILP, PIQP,NLP,INLP,PINLP 变量数量 "Global Optimum", "Local Optimum", "Feasible", "Infeasible“(不可行), "Unbounded“(无界), "Interrupted“(中断), "Undetermined“(未确定) T 模型类型 Class N In 当前解状态 当前目标函数值 Ob 约束数量 T Infe 约束不满足的总量 N Ite 目前为止的迭代次数 可直接求 解的变量 不作为决 策变量。 非零系数数量 T 扩展求解器 N 使用的特殊求解程序 Type B-and-B Global Multistart 到目前的最佳目标值 Obj 内存使用数量 目标函数值的界 特殊求解程序当前运行步数 求解花费时间 有效步数 分枝数(对B-and-B程序); 子问题数(对Global程序); 初始点数(对Multistart程序) 更新时间间隔
-初始印象练习- 打开lingo程序,将下面代码复制粘贴到模型窗口,并运行后观察结果报告。 model: title入门练习; max=2*x1+3*x2; 2*x1+x2<8; 4*x1+3*x2<15; END
-傻瓜输入法- • 傻瓜输入法格式 • 注意事项 • 算术运算符 • 逻辑运算符 • 数学函数
-傻瓜输入法格式- 例 直接用LINGO来解如下二次规划问题: Model: Title:傻瓜输入法; !小程序可用,大程序不提倡; [st1]x1+x2<100; [opt]max=98*x1+277*x2-x1^2-0.3*x1*x2-2*x2^2; [st2]x1<=2*x2; @gin(x1);@gin(x2); end
-注意事项- • “>”(或“<”)号与“>=”(或“<=”)功能相同; • LINGO模型以“MODEL:”开始,“END”结束; • 目标函数为“MAX=”。不需要写“ST” ; • 变量与系数间有乘号运算符“ * ”; • 变量名以字母开头,不能超过64个字符; • 变量名不区分大小写(包括LINGO中的关键字); • 语句的顺序不重要; • 行号自动产生或人为定义。目标函数所在行是第一行, 第二行起为约束条件,约束行名字被放“〔 〕”中; • 行中注有“!”符号的后面部分为注释;
-注意事项- • 在模型的开头可以用“TITLE” 对模型命名; • 变量可以放在约束右端; • 每行(目标,约束,说明语句)后增加 “;”; • @开头都是函数调用; • 上下界限定用@BND(),不计入模型的约束,也不能给出其松紧判断和敏感性分析; • 缺省假定所有变量非负;可在模型的“END”语句后用“@FREE()”将变量的非负假定取消; • 对0-1变量说明:@BIN();对整型变量说明:@GIN(); • 模型由一系列语句组成,适当缩进,增强可读性。
-算术运算符- 数与数之间的运算,运算结果也是数。 LINGO中的算术运算符有以下5种: +(加法), -(减法或负号), *(乘法), /(除法), ^ (求幂)。
-关系运算符- 表示是“数与数之间”的大小关系,在LINGO中用来表示优化模型的约束条件。 LINGO中关系运算符有3种: <(即<=,小于等于); =(等于), >(即>=,大于等于) 在优化模型中约束一般没有严格小于、严格大于关系.
-数学函数- @ABS(X):返回X的绝对值。 @SIN(X):正弦函数,返回X的正弦值(X的单位是弧度)。 @COS(X):返回X的余弦值(X的单位是弧度)。 @TAN(X):正切函数,返回X的正切值(X的单位是弧度)。 @EXP(X):返回eX的值(其中e=2.718281...)。 @POW(X,Y):指数函数,返回XY的值。 @SQR(X):平方函数,返回X的平方(即X*X)的值。 @SQRT(X):开平方函数,返回X的正的平方根的值。 @LOG(X):返回X的自然对数值。
-数学函数- @MOD(X,Y):模函数,返回X对Y取模的结果,即X除以Y的余数,这里X和Y应该是整数。 @SIGN(X):符号函数,返回X的符号值(X < 0时返回-1, X >= 0时返回+1)。 @SMAX(list):最大值函数,返回一列数(list)的最大值。 @SMIN(list):最小值函数,返回一列数(list)的最小值。 @FLOOR(X):返回X的整数部分(向最靠近0的方向取整)。 @LGM(X):返回X的伽玛(gamma)函数的自然对数值(当X为 整数时LGM(X) = LOG(X-1)!;当X不为整数时 ,采用线性插值得到结果)。
-实例1- 生产计划问题 某工厂计划安排生产Ⅰ,Ⅱ两种产品,已知每种单位产品的利润,生产单位产品所需设备台时及A,B两种原材料的消耗,现有原材料和设备台时的定额如表所示,问:怎么安排生产使得工厂获利最大?
-实例1- 程序编写 model: title生产计划问题; [maxf]max=2*x1+3*x2; [TIME]x1+2*x2<8; [A]4*x1<16; [B]4*x2<12; END
-实例1- 运行结果 Model Title: 生产计划问题 Variable Value Reduced Cost X1 4.000000 0.000000 X2 2.000000 0.000000 Row Slack or Surplus Dual Price MAXF 14.00000 1.000000 TIME 0.000000 1.500000 A 0.000000 0.1250000 B 4.000000 0.000000 安排是生产产品Ⅰ4单位,产品Ⅱ2单位,最大盈利为14万元 。
-傻瓜输入法练习- 《数学软件与数学实验》第二版 155页 第1题
-“段”的使用- • 集合段 • 数据段 • 目标与约束段 • 基本集合与派生集合 • 循环函数 • 循环求和函数 • 多维数组 • 过滤条件 • 逻辑运算符
-“段”的使用- 1.怎样表示: sets:!集合段; s/1..100/:x;!基本集合, 集合名与属性变量; endsets !目标与约束段; @sum(s(i):x(i))<90;!循环求和函数;
- “段”的使用- 2.怎样赋值: sets: ss/1..10/:b; endsets data:! 数据段; b=1 0 1 2 3 5 2 6 1 2; enddata
- “段”的使用- 3.怎样表示: sets: a/1..100/:; b/1..200/:; C(a,b):x;!派生集合; endsets @sum(c(i,j):x(i,j))=280;
- “段”的使用- 4.怎样表示: sets: a/1..100/:; b/1..200/:; C(a,b):x; endsets @for(b(j):@sum(a(i):x(i,j))=280); !集合元素的循环函数;
-集合循环函数- @FOR( )(集合元素的循环函数): 对集合setname的每个元素独立地生成表达式,表达式由expression_list描述。 @MAX( )(集合属性的最大值函数):返回集合setname上的表达式的最大值。 @MIN( )(集合属性的最小值函数):返回集合setname上的表达式的最小值。 @PROD( )(集合属性的乘积函数): 返回集合setname上的表达式的积。 @SUM( )(集合属性的求和函数):返回集合setname上的表达式的和。
- “段”的使用- 5.怎样表示: sets: a/1..100/:; b/1..200/:y; C(a,b):x; endsets @for(b(j):@gin(y(j))); @for(c(i,j):@bin(x(i,j));
- “段”的使用- 6.怎样表示: sets: a/1..20/:; b/1..30/:; C/1..40/:; d(a,b,c):x; endsets @for(a(i):@for(b(j): @sum(c(i,j,k)|k#gt#1#and#k#ne#10:x(i,j,k))=100)); !过滤条件;
-逻辑运算符- 运算结果只有“真”(TRUE)和“假”(FALSE)两个值(称为“逻辑值”),LINGO中用数字1代表TRUE,其他值(典型的值是0)都是FALSE。 在LINGO中,逻辑运算(表达式)通常作为过滤条件使用。 逻辑运算符有9种,可以分成两类: #AND#(与),#OR#(或),#NOT#(非):逻辑值之间的运算,它们操作的对象本身已经是逻辑值或逻辑表达式; #EQ#(等于),#NE#(不等于),#GT#(大于),#GE#(大于等于),#LT#(小于),#LE#(小于等于):是“数与数之间”的比较。 √ 例2 #gt# 3 #and# 4 #gt# 2 结果是:真(1) 假(0)?
- “段”的使用- 7.怎样表示: SETS: HANG/1..3/:B; LIE/1..4/:X; XISHU(HANG,LIE):A; ENDSETS DATA: A= 1 2 3 1 2 5 1 2 3 1 6 -2; B=4 5 7; ENDDATA @FOR(HANG(I): @SUM(LIE(J):A(I,J)*X(J))>B(I));
-程序编写- model: title生产计划程序1; Sets: yuefen/1..4/:c,x,e,d; endsets data: c=70 71 80 76; d=6000 7000 12000 6000; e=2 2 2 2 ; a=10000; enddata min=@sum(yuefen:c*x)+ @sum(yuefen(j)|j#lt#4:@sum(yuefen(i)|i#le#j:x-d)*e(j+1)); @for(yuefen(j)|j#lt#4: @sum(yuefen(i)|i#le#j:x)> @sum(yuefen(i)|i#le#j:d)); @sum(yuefen:x)= @sum(yuefen:d); @for(yuefen:x<a); end 遍历集合每一元素,下标可省略
-程序展开- MODEL: TITLE :生产计划程序1; [_1] MIN= 76 * X_1 + 75 * X_2 + 82 * X_3 + 76 * X_4 - 88000 ; [_2] X_1 >= 6000 ; [_3] X_1 + X_2 >= 13000 ; [_4] X_1 + X_2 + X_3 >= 25000 ; [_5] X_1 + X_2 + X_3 + X_4 = 31000 ; [_6] X_1 <= 10000 ; [_7] X_2 <= 10000 ; [_8] X_3 <= 10000 ; [_9] X_4 <= 10000 ; END
-程序编写- Model: Title生产计划程序2; Sets: yuefen/1..4/:c,x,e,d,s; endsets data: c=70 71 80 76; d=6000 7000 12000 6000; e=2 2 2 2 ; a=10000; enddata min=@sum(yuefen:c*x+e*s); @for(yuefen(i)|i#lt#4:s(i+1)=s(i)+x(i)-d(i)); s(4)+x(4)-d(4)=0; s(1)=0; @for(yuefen:x<a); @for(yuefen:@gin(x)); @for(yuefen:@gin(s)); End
-“段”的使用练习- 《数学软件与数学实验》第二版 155页 第1题(1),(2),(3)
-数据传递- • 与EXCEL交换数据
C4:C7单元命名为COST D4:D7单元命名为NEED E4:E7单元命名为SUPPLY F4:F7单元命名为SOLUTION 用于输出结果 B4:B7单元命名为CITIES -与EXCEL交换数据- 用“插入︱名称︱定义”命名选中区域
MODEL: SETS: MYSET: COST, ORDERED,NEED,SUPPLY; ENDSETS MIN = @SUM( MYSET( I): ORDERED ( I) * COST( I)); @FOR( MYSET( I): [CON1] ORDERED( I) > NEED( I); [CON2] ORDERED( I) < SUPPLY( I)); DATA: MYSET =@OLE(‘D:\rxl\lingo程序\mydata.xls’,‘CITIES’); !全路径指明文件,否则当前目录; COST,NEED,SUPPLY =@OLE(mydata.xls);!按对应的相同名称输入; @OLE(mydata.xls,‘SOLUTION’)=ORDERED; !将SHIP 值赋给Excel中的SOLUTION; ! 或者直接写地址:@OLE(mydata.xls,‘Sheet1!$F$4:$F$7’)=ORDERED; ENDDATA END -数据传递-与EXCEL交换数据
-数据传递-与EXCEL交换数据 报告窗口输出总结报告: Export Summary Report --------------------- Transfer Method: OLE BASED Workbook: mydata.xls Ranges Specified: 1 SOLUTION Ranges Found: 1 Range Size Mismatches: 0 Values Transferred: 4 采用OLE方式传输数据; EXCEL文件为mydata.xls; 指定的接收单元范围为SOLUTION; 在mydata.xls正好找到一个名为SOLUTION的域名; 不匹配的单元数为0; 传输了4个数值。
-实例2-2011全国数模竞赛的一个模型 从excel文档中读入数据,先给数据区域命名。用“插入︱名称︱定义”命名选中区域。 model: title分片; sets: pingtai/1..24/:p; lukou/1..92/:n; link(pingtai,lukou):t,x; endsets data: t=@ole('d:\time1.xls','t'); n=@ole('d:\fa.xls','n'); enddata
-实例2-2011全国数模竞赛的一个模型 min=u; @for(pingtai(i):p(i)=@sum(lukou(j):x(i,j)*n(j))); @for(pingtai(i): @for(pingtai(k): p(i)-p(k)<u;)); @for(link:t*x<30;); @for(link:@bin(x)); @for(lukou(j):@sum(pingtai(i):x(i,j))=1); end
-程序结构与调试- • 程序结构 • 程序调试
-程序结构- 一般来说, LINGO中建立的优化模型可以由六个部分组成,或称为六“段”(SECTION): (1)集合段(SETS):以“ SETS:” 开始, “ENDSETS”结束,定义必要的集合变量(SET)及其元素(MEMBER,含义类似于数组的下标)和属性(ATTRIBUTE,含义类似于数组)。 (2)目标与约束段:目标函数、约束条件等,没有段的开始和结束标记,因此实际上就是除其它四个段(都有明确的段标记)外的LINGO模型。 (3)数据段(DATA):以 “DATA:” 开始, “ENDDATA”结束, 对集合的属性(数组)输入或输出必要的常数数据。 格式为:“attribute(属性) = value_list(常数列表);”