Lingo 的基本使用

哎,什么都得自学……学校课程欠缺好大……

lingo 的语法

注意除号为 /

表示次方,使用 ^ eg:x^2

lingo 不区分大小写,eg:mmm、Mmm、mMm 都视为同一个变量。(Spss 也不区分哦)

lingo、Matlab 中变量的命名不要使用驼峰式,使用下划线,且字母在首位。

lingo 不读取空格

model end 关键词可以不添加。但是 使用矩阵工厂创建矩阵后,整个程序需用 model:end 包起来。

Lingo 17 有时候会报一些语法错误,但是明明没有错误……

注意:Lingo 中的代码表示的是方程组,这点很重要。不能将计算机语言中的一些默认特性带入 Lingo。比如:Lingo 中不可以 “给同一个变量赋不同的值”。(之所以打双引号是因为 Lingo 中的都是方程,用变量赋值来说,在数学上不准确)

错误实例:

c = 1;
c = 2;

Lingo 会提示异常,c 的结果也不对:

没有被赋初始值的变量,可能默认不是 0,亦有可能是 1.234568。你可以手动覆盖,问题不大。出现这种情况可能是因为内部实现使用了不同的算法。

lingo也可以用来解普通方程

lingo 用于解线性规划

如果是求线性规划问题,目标值会在 Objective value 属性中给出

  1. 一个线性规划中只含有一个目标函数。(两个以上的多目标线性规划,Lingo无法直接解) 如果建模同学给了我们多个目标函数,直接告诉他,没办法用 Lingo 求解,需要将多目标线性规划转换成 一个目标,这其实是有方法的。

    Lingo不能直接求解目标规划问题,但可以通过逐级求解线性规划的方法,求得目标规划问题的解

  2. 求目标函数的最大值或最小值分别用 max=… 或 min=… 来表示

  3. !我是注释; 但是 Lingo17 注释遇到分号就会终止注释语句,这一点一定要留意 : 不要在 Lingo 的注释语句中 写 matlab 矩阵格式 的矩阵!

    以下代码直接报错

    x^2 + y^2 + 2*x = 103;
    !sdfdsfds;
    2*x + y = 12;
    y > 5;![2, 2; 2 3];
    

    不写 matlab 语法中的矩阵即可

  4. 线性规划和非线性规划的本质区别是目标函数是否线性,其余一致,故不需要区分。但值得注意的是,非线性规划的求解十分困难,基本得不到全局最优解(可以得到 “满意解” )建议将非线性问题转化为线性问题来求解。

  5. 如果一个线性代数问题有多个解,则 Lingo 只会给其中的一种。

矩阵工厂

矩阵工厂就是集合的意思, 用来生产一维矩阵

使用 A(i) 拿到一维矩阵 A 的 第 i 个元素。

sets:factory/1..6/:a,b;plant/1..3/:x,y;
endsets
  1. factory 与 plant 都是矩阵工厂,但是是两家不同的工厂。

  2. factory 工厂后面的 /1…6/ 说明它专门生产 1*6 矩阵

    factory 工厂最后面出现的 a 和 b,都是 1*6 的矩阵

  3. plant 工厂后面的 /1…3/ 表示 它专门生产 1*3 矩阵

  4. plang、factory 工厂的名称随便起,无所谓。矩阵变量名也是如此

  5. 本质上只定义了四个行矩阵的大小,矩阵工厂只是中介。

  6. 生产完矩阵后,工厂和矩阵之间将脱开联系。

  7. Lingo 不是一行行地读代码的。所以我们使用 sets:endsets 表示矩阵工厂生产流程的起止。

矩阵的赋值

data:enddata 代码块一定要写在 sets:endsets 之后

  1. 不是所有矩阵都要被赋值,有些矩阵正是我们要求解的变量(如 解向量 x)。

  2. Lingo 矩阵赋值时,你就老实写数字,不要写 一个算式,不要打算让 Lingo 帮你先求解再给矩阵赋值:

for 循环

当一个数学式子需要手写好几个代码行的时候就可以使用for循环代替

这个式子,手写需要 5 行。

使用 for 循环表示如下:

sets:col_1/1..5/:a,x;
endsetsdata:a = 1 2 3 4 5;
enddatamax S;@for( col_1(i): a(i)*x(i) = s);
!for( col_1 : a*x = s) 这样也行;
  1. for 循环,执行整行语句,因为 S = ai * xi , i = 1, 2, …, 5 相当于 5 个约束条件
  2. for 循环内部,先写工厂,以告诉 for 循环几次,之后再上接约束条件。
  3. for 循环中的 i 可以替换成其他变量,随意。
  4. 这个 for 循环中 i 甚至可以省略,这是因为不会造成歧义。这是特殊情况。二维工厂出现后必须要带 i。

sum

暴力Lingo:

sum Lingo:

for 与 sum 出现的标志

  1. 约束条件后面有 i=1,2,...,ni = 1, 2, ...,ni=1,2,...,n ,一定在最外层 套上 for。
  2. 约束条件前面是 ∑i=1nXi\sum_{i=1}^{n}X~i~∑i=1n​X i  一定要在外层 加上 sum。

工厂合并

工厂合并 : 生产二维矩阵

既然是合并,那显然,首先必须要有两个生产一维矩阵的工厂

sets:factory /1..6/ : a;plant /1..8/ : d;Matrix(factory, plant) : c,x;
endsets

Matrix 是生产 6*8 二维矩阵的工厂。

二维工厂也可以用于表示 for 循环。例题中会体现

二维工厂的赋值

data:Matrix = 1 2 3 4 ...balabala... 48; !一共需要64个元素;
enddata

例题

model:sets:row/1..6/:ro, a;col/1..8/:co, d;Matrix(row, col):x, c;endsetsdata:a = 60 55 51 43 41 52;d = 35 37 22 32 41 32 43 38;c = 6 2 6 7 4 2 5 84 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;enddata!目标函数;         !min = @sum( row(i): @sum( col(j):c(i,j)*x(i,j) ) )完全等价于下式;          min = @sum( Matrix(i,j) : c(i,j)*x(i,j) );!约束条件;       @for( row(i) : @sum( col(j) : x(i,j) ) <= a(i) );@for( col(j) : @sum( row(i) : x(i,j) ) = d(j) );end

结果:

参考视频

Lingo 的基本使用入门相关推荐

  1. idx1_如何使用WordPress创建IDX房地产网站

    idx1 Do you want to create an IDX real estate website using WordPress? A real estate website require ...

  2. 【转】和蜗牛一起学DIRECTOR 第二讲 按钮效果

    和蜗牛一起学DIRECTOR 第二讲 按钮效果http://blog.sina.com.cn/s/blog_594398e801019a2f.html 任何一个程序必不可少的交互元素就是按钮,我们的L ...

  3. lingo入门(数据部分)

    lingo入门(数据部分) 在数据部分也可以指定一些标量变量(scalar variables).当一个标量变量在数据部 分确定时,称之为参数. data: interest_rate = .085; ...

  4. Lingo学习笔记(一)——语法入门

    lingo语法入门 lingo常用文件格式 LINGO Solver Status窗口要素详解 窗口右侧内容介绍 窗口左上角内容介绍 窗口左下角内容介绍 Lingo的基本用法注意事项 Lingo模型建 ...

  5. LINGO的入门介绍

    LINGO初步介绍 LINGO是用来解决优化问题的一个特别好用的软件,可以快速求解线性规划.非线性规划.线性和非线性方程组等等,是数学建模中求优化问题的解不可缺少的工具之一. 首先让我们来看一个问题: ...

  6. lingo基础入门Day 1——lingo建模与线性规划、最优解总结

    lingo基础入门Day 1 文章目录 lingo基础入门Day 1 lingo的主要功能与特色 用LINGO建模 简单模型:生产计划问题 基于集合的专业模型 线性规划模式的三种形式: 简单模型与专业 ...

  7. lingo基础入门Day 7——lingo应用之运输问题与生产问题总结

    lingo基础入门Day 7 文章目录 lingo基础入门Day 7 lingo应用:运输问题 给常量赋值: 建立目标函数:运费最少 产量约束: 销量约束: 完整模型: 显示结果: 派生集合的构造方法 ...

  8. 一部适合有一点点lingo编程基础的人阅读的lingo入门教程——重学lingo,发现很多遗忘的小知识,并将其整理成册——运算符、数学函数、金融函数、概率密度函数、变量定界与集操作函数

    一.序言 lingo是一款处理优化问题十分好用的软件. 虽然常常使用,但却许久未曾再系统的学习过,前段时间,重学MATLAB,发现了很多遗忘的知识点,今日,决定重学lingo,将易于遗忘的那些基本的语 ...

  9. Lingo入门- 求解LP问题实例1

    最近在学习高级运筹学,发现有的题型列式建模还好,求解手算实在无能,变量实在太多,大学里下了这个lingo软件,对于求解LP问题,还是相当友好,在上网查看了一些资料,总结下来随手写下,作为这个软件使用的 ...

  10. 运筹优化学习01:Lingo入门与错误列表分析

    目录 1 Lingo编程基础 1.1基本思路 1.2 建模思路 1.3 注意事项 2 整数规划模型求解示例(不使用集合语言) 2.1 问题模型 2.2 lingo源代码: 2.3 结果展示 2.4 小 ...

最新文章

  1. spring 数组中随机取几个_游戏编程中需要掌握哪些数学物理知识
  2. BUZZER Driver
  3. 自定义Docker容器的 hostname
  4. 极致的线上产品设计与终极数据分析工具,两者缺一不可(下)
  5. C语言再学习 -- Xargs用法详解
  6. linux安装trac+svn+apache+wike,windos中Trac+apache+svn的安装与配置
  7. timesten支持mysql吗_Timesten常用命令
  8. 如何访问 SAP Screen Personas 培训系统以及完成一个最简单的例子
  9. 一个具体的例子学习SAP S/4HANA里Fiori应用的排错分析
  10. 数据获取之网络爬虫专栏简介
  11. 华为余承东鸿蒙系统随时可以上线,华为发布鸿蒙系统,余承东称随时可替换安卓...
  12. Java基础知识之跳转语句、循环标号多级break跳出实现、Random库
  13. EasyUI 扩展自定义EasyUI校验规则 验证规则
  14. 【Vue3.0】—V- model‘ directives require no argument.
  15. 小规模团队如何“微服务”管理
  16. java 1.8 64_JDK 1.8 64位 下载 安装 配置
  17. 设计FMEA步骤四:失效分析
  18. 【转】移动,电信,中行软开,微软,百度等企业工作纯技术性分析
  19. D盘或者E盘根目录出现msdia80.dll文件的解决方法
  20. java计算机毕业设计海康物流MyBatis+系统+LW文档+源码+调试部署

热门文章

  1. Java反编译工具汇总
  2. 使用Object、param标签在页面显示PDF文件
  3. python处理access数据库教程_Python操作Access数据库基本操作步骤分析
  4. Win10值得推荐的软件,提升效率和桌面美观
  5. win10远程桌面查看对方计算机名,详细教你win10远程桌面连接命令
  6. matlab 二维低通滤波器,matlab二维低通滤波器
  7. 最新版本的NGUI插件NGUI Next-Gen UI
  8. Github上关于iOS的各种开源项目集合(强烈建议大家收藏,查看,总有一款你需要)
  9. SwitchHosts工具介绍及下载
  10. Java并发:整理自《Java并发编程实战》和《Java并发编程的艺术》