Questions in category: Lingo (Lingo)
软件 >> Lingo
<[1] [2] >

1. 运输模型例子(Wireless widgets example)

Posted by haifeng on 2018-03-27 10:03:14 last update 2018-03-27 12:00:35 | Answers (0) | 收藏


假设 Wireless Widget 公司(简称 WW 公司)有六个仓库给八个供应商供货.

  • 每个仓库有库存量限制, 也就是说存放的 widgets 不能超过一定的量.
  • 每个供应商(vendor)有基本的widgets需求量, WW公司必须保证提供的.

WW 公司希望能确定每个仓库到每个供应商的供货数量, 以最小化总的运输费用.

 

以下数据是仓库的存储能力以及供应商的最低保证供货量, 以及每个widget的运输费用表:

Widget Capacity Data
Warehouse(仓库) Widgets On Hand
1 60
2 55
3 51
4 43
5 41
6 52


 

Vendor Widget Demand
Vendor Widget Demand
1 35
2 37
3 22
4 32
5 41
6 32
7 43
8 38

 

 

Shipping Cost per Widget ($)
  V1 V2 V3 V4 V5 V6 V7 V8
WH1 6 2 6 7 4 2 5 9
WH2 4 9 5 3 8 5 8 2
WH3 5 2 1 9 7 4 3 3
WH4 7 6 7 3 9 2 7 1
WH5 2 3 9 5 7 2 6 5
WH6 5 5 2 2 8 1 4 3

 

 


[Solution]

由于每个仓库可以将widgets运输给每个供应商, 因此总共有 $6\times 8=48$ 种可能的运输路径. 我们需要 48 个变量来分别表示这些运输路径上运输widgets的量.

 

建立模型的第一步是构建目标函数. 如上面提到的, WW公司希望能最小化运输成本. 我们记 VOLUME_I_J 为从仓库 I 到供应商 J 的运输widgets的数量. 于是, 如果我们要精确写出目标函数的话, 则我们需写成:


MIN =  6 * VOLUME_1_1 + 2 * VOLUME_1_2 +

6 * VOLUME_1_3 + 7 * VOLUME_1_4 +

4 * VOLUME_1_5 +

.

.

.

8 * VOLUME_6_5 + VOLUME_6_6 + 4 * VOLUME_6_7 +

3 * VOLUME_6_8;


 

我们看到, 输入如此长的公式, 显然是繁琐且容易出错的.

如果你熟悉数学符号, 可以将上面的冗长公式表示为紧凑的方式

\[
\mathrm{Minimize}\ \sum_{i,j}\mathrm{COST}_{i,j}\cdot\mathrm{VOLUME}_{i,j}
\]

类似的, LINGO 的模型语言允许你将目标函数表示为如下更为简短, 容易键入, 容易理解的形式:

MIN = @SUM( LINKS(I,J): COST(I,J) * VOLUME(I,J));

换句话说,

 

 


 

References:

LINGO 14 Online Users Manual.  [A Sample Transportation Model]

2. [Lingo]使用Sets

Posted by haifeng on 2018-03-26 22:23:50 last update 2018-03-27 09:55:23 | Answers (0) | 收藏


当我们对应实际生活场景建立模型时, 总是有一个或多个由相关对象组成的群组.

这种对象的例子可能包括工厂(factories)、客户(customers)、车辆(vehicles)或者雇员(employees).

LINGO 允许我们将相关对象组织在一些集合中.

一旦模型中的对象被组织到集合中, 你就可以使用基于set的函数释放LINGO模型语言的全部威力了.

 

一个set可以是一系列产品、很多辆卡车或者一组雇员等等. Set 中的每个成员可能有一个或多个特征. 我们将这些特征称为属性(attributes).

例如,

  • 产品集合中每个产品可以有价格(price)这个属性.
  • 卡车集合中每辆卡车可以有牵引能力(hauling capacity)这个属性.
  • 雇员集合中每位雇员可以有薪资(salary)这个属性, 也可能还具有生日(birth date)这个属性.

 

LINGO 认识两种集合: primitive 和 derived.

基元集(primitive set)是指仅由那些不能进一步减少(reduced)的对象所组成的集合.

 

 

 


References:

LINGO 14 Online Users Manual.  [Using Sets]
 

3. [Exer3.4.2--数学建模]

Posted by haifeng on 2018-03-20 17:17:27 last update 2018-03-20 17:19:17 | Answers (1) | 收藏


某工厂用 $A_1,A_2$ 两台机床加工 $B_1$, $B_2$, $B_3$ 三种不同零件.

已知在一个生产周期内 $A_1$ 只能工作 80 机时, $A_2$ 只能工作 100 机时.

一个生产周期内计划加工 $B_1$ 70件, $B_2$ 50件, $B_3$ 20件.

两台机床加工每个零件的时间和加工每个零件的成本, 分别如下列各表所示:

 

加工每个零件的时间表       单位: 机时
机床 零件
$B_1$ $B_2$ $B_3$
$A_1$ 1 2 3
$A_2$ 1 1 3

 

加工每个零件的成本表       单位: 元
机床 零件
$B_1$ $B_2$ $B_3$
$A_1$ 2 3 5
$A_2$ 3 3 6

 

 

 

4. [Exer3.4.1--数学建模]某鸡场有1000只鸡, 用动物饲料和谷物饲料混合喂养. ...

Posted by haifeng on 2018-03-20 16:49:28 last update 2018-03-20 16:49:28 | Answers (1) | 收藏


某鸡场有1000只鸡, 用动物饲料和谷物饲料混合喂养.

每天每只鸡平均吃掉混合饲料0.5kg, 其中动物饲料所占比例不能少于 20%.

动物饲料每千克 0.30 元.
谷物饲料每千克 0.18 元.

饲料公司每周仅保证供应谷物饲料 6000kg, 问饲料怎样混合才能使成本最低?

5. Lingo 程序的语法

Posted by haifeng on 2018-03-20 09:52:35 last update 2018-03-20 17:08:16 | Answers (0) | 收藏


我们以 Lingo 参考手册中的例子来说明.

例子:

CompuQuick 公司生成两种型号的计算机: Standard 和 Turbo.

Standard 每台利润为 $\$100$, 而 Turbo 每台的利润为 $\$150$.

在CompuQuick工厂, Standard型计算机的生产线每天至多可以制造 100台此型号的计算机; 而 Turbo型计算机的生产线每天至多可以制造 120台.

进一步的, CompuQuick公司每日劳动力可用资源是有限制的: 具体的, 每日可供使用的劳动力是 160小时.

Standard型计算机和Turbo型计算机每台每天分别需要1小时和2小时的劳动力.

CompuQuick 公司的问题是确定这两种型号计算机的每日生产计划, 在不超出生产线能力限制和劳动力资源约束的情况下实现利润最大化.

 


[建立模型]

令 STANDARD 和 TURBO 分别是Standard型和Turbo型计算机每天所生产的台数. 于是模型代码如下:

 

model:
! Here is the total profit objective function;
MAX = 100 * STANDARD + 150 * TURBO;

! Constraints on the production line capacity;
STANDARD <= 100;
TURBO <= 120;

! Our labor supply is limited;
STANDARD + 2 * TURBO <= 160;
 

end  ! end 可以不写;


 

Lingo 程序中的注释符使用感叹号(exclamation) !

 

Lingo 程序中的表达式可以写成多行, 只要以分号` ; ` 结束.  例如上面的目标函数可以写成两行:

MAX = 100 * STANDARD
+ 150 * TURBO;

 

 

对于注释也一样, 只要介于 ! 和 ; 之间的都会被 LINGO所忽略. 例如:

X = 1.5 * Y + Z / 2 * Y;   ! This is a comment;
X = 1.5 *   ! This is a comment in the middle
of a constraint;  Y + Z / 2 * Y;

 

变量的命名规则

LINGO 不区分变量的大小写, 因此 TURBO如果写成 turbo 或 Turbo 等是一样的.

变量必须以字母(A-Z)开头, 后续的字符可以是字母或数字(0-9)或者下划线 ` _ ` .

变量名的长度不超过 64 个字符.

 

 

 

 


References:

LINGO 14 Online Users Manual

6. Lingo 命令行之命令 cat

Posted by haifeng on 2018-03-16 11:31:08 last update 2019-03-15 17:19:15 | Answers (0) | 收藏


首先进入命令行界面, 方法是

  • 点击菜单栏的[Window]-->[Command Window]
  • 或按快捷键 Ctrl+1

 

cat 命令显示LINGO中 9 个类别的命令.

 

按回车(或者是空行)即可退出,


 

实验

 

: cat

 LINGO commands by category.  For information on a specific command, type:
 'HELP command-name'.

   1) Information

   2) Input

   3) Display

   4) File Output

   5) Solution

   6) Problem Editing

   7) Quit

   8) System Parameters

   9) Miscellaneous

 Which category is of interest (1 to  9)?
? 1
 The commands in this category are:
      COM     CAT     HELP    MEM
 Which category is of interest (1 to  9)?
? 2
 The commands in this category are:
      MODEL   TAKE    RMPS    FRMPS   RMPI    RLPF
 Which category is of interest (1 to  9)?
? 3
 The commands in this category are:
      LOOK    GEN     PAUS    HIDE    STATS   PICTURE DUAL    XDETEQ  SCENE
      SHOWNL  LISTFIX
 Which category is of interest (1 to  9)?
? 4
 The commands in this category are:
      DIV     RVRT    SAVE    SMPS    SMPI
 Which category is of interest (1 to  9)?
? 5
 The commands in this category are:
      GO      SOLU    NONZ    RANGE   DEBUG
 Which category is of interest (1 to  9)?
? 6
 The commands in this category are:
      DEL     EXT     ALT
 Which category is of interest (1 to  9)?
? 7
 The commands in this category are:
      QUIT
 Which category is of interest (1 to  9)?
? 8
 The commands in this category are:
      PAGE    TERS    VERB    WIDTH   SET     FREEZE  DBUID   DBPWD   APISET
 Which category is of interest (1 to  9)?
? 9
 The commands in this category are:
      TIME
 Which category is of interest (1 to  9)?

 


注意在 ? 后面输入 q 然后回车, 即可退出 Lingo 程序.

 

7. Lingo 中的快捷键

Posted by haifeng on 2018-03-16 10:50:29 last update 2018-03-16 11:24:51 | Answers (0) | 收藏



 

Lingo 中的快捷键
快捷键 功能 菜单点击
Ctrl + I 打开设置窗口 LINGO-->Options
Ctrl + U 求解模型 LINGO-->Solve
Ctrl + 1 打开命令行窗口 Window-->Command Window
Ctrl + 2 显示状态窗口 LINGO-->Solve 除了显示解的数据, 还会弹出状态窗口(可以设置不显示)
Ctrl + B 将当前窗口放到其他窗口的底下 Window-->Send to Back
Ctrl + 3 关闭所有打开的窗口 Window-->Close All
Ctrl + 4 以水平或垂直的显示方式排列已打开的窗口 Window-->Tile
Ctrl + 5 将所有已打开的窗口以层叠方式排列. 当前窗口位于顶层. Window-->Cascade
Ctrl + 6 将所有最小化的窗口规则排列到左下方 Window-->Arrange Icons

 

8. Lingo 的命令行窗口

Posted by haifeng on 2018-03-16 10:33:43 last update 2018-03-16 10:40:44 | Answers (0) | 收藏


启动 Lingo 的命令行窗口: 点击菜单

Windows--> Command Window

或者按快捷键 Ctrl + 1

 

 

在命令行窗口中, 你可以在“:”提示符后面键入任何有效的 LINGO script 命令与 LINGO 进行交互.


例如:依次键入下面的语句. 其中 ? 是提示符. model 是模型的开始, end 表示结束.

: model
? max = 20* x+30*y;
? x<=50;
? y<=60;
? x+2*y<=120;
? end
:

键入 look all 命令
: look all

将显示

1]max = 20* x+30*y;
2]x<=50;
3]y<=60;
4]x+2*y<=120;

键入命令 go 求解此模型

: go

 

 

9. LINDO API

Posted by haifeng on 2018-03-16 10:28:24 last update 2018-03-16 10:28:24 | Answers (0) | 收藏


LINDO API 是 LINGO 的求解引擎. LINDO API 有丰富的参数设置用来控制它各种不同的求解器(solvers).

大多相关的参数可以在 LINGO|Options中设置. 但有一些高级的参数必须通过 APISET 命令进行设置.

 

 

 


References:

LINGO 14 Online Users Manual

10. Lingo的状态栏

Posted by haifeng on 2018-03-16 10:21:15 last update 2018-03-16 10:21:15 | Answers (0) | 收藏


Lingo的状态栏在应用程序界面的最下方. 可以设置显示或隐藏.

具体的:

在菜单上,点击 LINGO-->Options...  (或者快捷键 Ctrl + I)弹出 Lingo Options 对话框, 在 Interface 选项页的 General 部分, 可以勾选 Status Bar.

然后点击【应用】或【OK】

 

<[1] [2] >