LINGO 中建立的优化模型可以由5个部分组成,或称为 5 段(section):

(1)集合段(SETS):这部分要以“SETS:”开始,以“ENDSETS”结束,作用在于定义必要的集合变量(SET)及其元素(member,含义类似于数组的下标)和属性(attribute, 含义类似于数组)。

(2)目标与约束段:这部分实际上定义了目标函数、约束条件等,但这部分并不有段的 开始和结束标记,因此实际上就是除其他 4 个段(都有明确的段标记)外的 LINGO 模型。 这里一般要用到LINGO 的内部函数尤其是与集合相关的求和函数@SUM和循环函数@FOR 等,可在具体使用中体会其功能和用法。

(3)数据段(DATA):这部分要以“DATA:”开始,以“ENDDATA”结束,作用在于对集合的属性(数组)输入必要的常数数据。格式为: attribrte(属性)=value_list(常数列表); 常数列表(value_list)中数据之间可以用逗号“,”分开,也可以用空格分开(回车的作用也等价 于一个空格),如上面对 DEM 的赋值也可以写成“DEM=40 60 75 25;” 在 LINGO 模型中,如果想在运行时才对参数赋值,可以在数据段使用输入语句.。但这仅用于对单个变量赋值,而不能用于属性变量(数组),输入语句格式为:“变量名=?;”。例如, 上面的例子中如果需要在求解模型时才给出初始库存量(记为 A),则可以在模型中数据段写上语句: A=?; 在求解时 LINGO 系统给出提示界面,等待用户输入变量 A 的数值。当然,此时的约束语句 INV(1)=10+RP(1)+OP(1)-DEM(1); 也应该改写成 INV(1)=A+RP(1)+OP(1)-DEM(1); 这样,模型就可以计算任意初始库存量(而不仅仅只能计算初始库存量为 10)的情况了。

(4)初始段(INIT):这部分要以“INIT:”开始,以“ENDINIT”结束,作用在于对集合的属性(数组)定义初值(因为求解算法一般是迭代算法,所以用户如果能给出一个比较好迭代初值,对提高算法的计算效果是有益的)。如果有一个接近最优解的初值,对 LINGO 求解模型是有帮助的。定义初值的格式为 attribute(属性)= value_list(常数列表); 这与数据段中的用法是类似的。

(5)计算段(CALC):这部分要以“CALC:”开始,以“ENDCALC”结束,作用在于对一些原始数据进行计算处理(这种处理是在数据段的数据输入完成以后、LINGO 开始 正式求解模型之前进行的)。为什么要设计这个段?这是因为在实际问题中,输入的数据通常是原始数据,不一定能在模型中直接使用,我们就可以在这个段对这些原始数据进行一定的“预处理”,得到我们模型中真正需要的数据。 请大家注意,在计算段中语句是顺序执行的,所以上面的一两个语句不能交换顺序,

LINGO 中的逻辑运算符有 9 种,可以分为两类:

(1)#OR#(或),#AND#(与),#NOD#(非):这 3 个运算是逻辑值之间的运算,也就是它们操作的对象本身 必须已经是逻辑值或逻辑表达式..计算结果也是逻辑值

(2)#EQ#(等于).#NE#(不等于),#GT#(大于),#GE#(大于等于),#LT#(小于).#LE#(小于等于):

参考实例:

min=@sum(hz(i):@sum(hz(j):@sum(cl(k):c(i,j)*x(i,j,k))));

@for(cl(k):@sum(hz(i)|i#gt#1:g(i)*y(k,i))<=q(k));

@for(hz(i)|i#gt#1:@sum(cl(k):y(k,i))=1);

y(1,1)+y(2,1)=2;

@for(hz(i):@for(cl(k):@sum(hz(j)|j#ne#i:x(j,i,k))=y(k,i)));

@for(hz(i):@for(cl(k):@sum(hz(j)|j#ne#i:x(i,j,k))=y(k,i)));

@for(hz(i):@for(hz(j):@for(cl(k):@bin(x(i,j,k)))));

@for(cl(k):@for(link2(i,j)|i#ne#j#and#j#ne#1:u(k,i)-u(k,j)+10*x(i,j,k)<=9));

@for(link1(k,i):@bin(y(k,i)));

  

变量定界函数对变量的取值范围附加限制,共有以下四种函数:

@BND(L,X,U):限制 L〈=X〈=U。注意 LINGO 中命令 SLB,SUB 类似函数@SLB 和 @SUM. @BIN(X):即限制 X 为 0 或 1。注意 LINGO 中这个函数的名字却不是@INT(X).

@FREE(X):取消对 X 的符号限制(即可取负数、0 后正数)。

@GIN(X):限制 X 为整数。

LINGO 基础学习笔记的更多相关文章

  1. 【C#编程基础学习笔记】4---Convert类型转换

    2013/7/24 技术qq交流群:JavaDream:251572072  教程下载,在线交流:创梦IT社区:www.credream.com [C#编程基础学习笔记]4---Convert类型转换 ...

  2. 【C#编程基础学习笔记】6---变量的命名

    2013/7/24 技术qq交流群:JavaDream:251572072  教程下载,在线交流:创梦IT社区:www.credream.com [C#编程基础学习笔记]6---变量的命名 ----- ...

  3. 1.C#基础学习笔记3---C#字符串(转义符和内存存储无关)

    技术qq交流群:JavaDream:251572072  教程下载,在线交流:创梦IT社区:www.credream.com ------------------------------------- ...

  4. Java基础学习笔记总结

    Java基础学习笔记一 Java介绍 Java基础学习笔记二 Java基础语法之变量.数据类型 Java基础学习笔记三 Java基础语法之流程控制语句.循环 Java基础学习笔记四 Java基础语法之 ...

  5. Mysql数据库基础学习笔记

    Mysql数据库基础学习笔记 1.mysql查看当前登录的账户名以及数据库 一.单表查询 1.创建数据库yuzly,创建表fruits 创建表 ) ) ,) NOT NULL,PRIMARY KEY( ...

  6. 0003.5-20180422-自动化第四章-python基础学习笔记--脚本

    0003.5-20180422-自动化第四章-python基础学习笔记--脚本 1-shopping """ v = [ {"name": " ...

  7. Java基础学习笔记(一)

    Java基础学习笔记(一) Hello World 基础代码学习 代码编写基础结构 class :类,一个类即一个java代码,形成一个class文件,写于每个代码的前端(注意无大写字母) XxxYy ...

  8. C#RabbitMQ基础学习笔记

    RabbitMQ基础学习笔记(C#代码示例) 一.定义: MQ是MessageQueue,消息队列的简称(是流行的开源消息队列系统,利用erlang语言开发).MQ是一种应用程序对应用程序的通信方法. ...

  9. handlebars.js基础学习笔记

    最近在帮学校做个课程网站,就有人推荐用jquery+ajax+handlebars做网站前端,刚接触发现挺高大上的,于是就把一些基础学习笔记记录下来啦. 1.引用文件: jquery.js文件下载:h ...

随机推荐

  1. WordPress中添加自定义评论表情包的方法

    先来看看效果: 现在由于WordPress版本更新,再加上WordPress主题也越来越多,而现在的主题一般都是禁用了WordPress自带的评论表情,其实自带 的评论表情也是很丑的,但是以前我们可以 ...

  2. iframe标签的定时刷新

    由于有个项目是大数据类型的,需要时时展现数据,这就出现了这个需求,页面不断刷新,这个其实很简单了,window.location.reload(); 这个就轻松搞定了,但是灵机一动,加上个控制吧,这下 ...

  3. 初探JodaTime

    在学习java之初时就使用过jdk自带的java.util.Calendar ,近期的项目中需要达到类似功能的时候使用了JodaTime. Joda-Time 令时间和日期值变得易于管理.操作和理解. ...

  4. java--计时器

    计时器 一.窗口化 public class Pro extends JFrame{ private JTextField textField = new JTextField(45);//系统时间文 ...

  5. Struts2 学习之小白开始

    Struts2 基础知识学习总结 Struts2 概述:Struts2 是一个用来开发 MVC 应用程序的框架,他提供了 Web 应用程序开发过程中的一些常见问题的解决方案,比如对于用户输入信息合法性 ...

  6. 笔记:Maven 依赖及配置详解

    dependencies 配置节,主要用于配置项目依赖的其他包,其子节点 dependency 用来配置具体依赖包,有groupId.artifactId.version.scope等子节点来说明,配 ...

  7. AsyncTask源码笔记

    AsyncTask源码笔记 AsyncTask在注释中建议只用来做短时间的异步操作,也就是只有几秒的操作:如果是长时间的操作,建议还是使用java.util.concurrent包中的工具类,例如Ex ...

  8. 简述Java三大特性

    1.面向对象有三大特性,分别是:封装.继承和多态.2.封装:面向对象的封装就是把描述一个对象的属性和行为的代码封装在一个类中,有些属性是不希望公开的,或者说被其他对象访问的,所以我们使用private ...

  9. Angular开发实践(五):深入解析变化监测

    什么是变化监测 在使用 Angular 进行开发中,我们常用到 Angular 中的绑定--模型到视图的输入绑定.视图到模型的输出绑定以及视图与模型的双向绑定.而这些绑定的值之所以能在视图与模型之间保 ...

  10. Flashing Back a Failed Primary Database into a Physical Standby Database(闪回FAILOVER失败的物理备库)

    文档操作依据来自官方网址:https://docs.oracle.com/cd/E11882_01/server.112/e41134/scenarios.htm#SBYDB4888 闪回FAILOV ...