LINGO大规模规划求解_第1页
LINGO大规模规划求解_第2页
LINGO大规模规划求解_第3页
LINGO大规模规划求解_第4页
LINGO大规模规划求解_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

lingo 大规模规划求解 首先 让我们先看看一个非常简单的规划例子在 LINGO 软件中实现过程 目标函数 2 1 2 3 3 5 约束条件 1 2 3 3 10 1 2 2 5 1 2 3 求解上面目标函数的最小值 我们在 lingo 中可编写如下代码 model MIN 2 X1 X2 3 X3 5 X1 X2 3 X3 5 GIN X1 整数约束 GIN X2 GIN X3 END 可以看出 可以看出 LINGO 语言和数学专业语言很接近 很容易表示约束条件和目标函语言和数学专业语言很接近 很容易表示约束条件和目标函 数 数 可是对于规模很大的约束条件 难道我们也必须这样一条一条的输入吗 显然可是对于规模很大的约束条件 难道我们也必须这样一条一条的输入吗 显然 这样做是一件非常困难和繁琐的事 这样做是一件非常困难和繁琐的事 lingo 语言又是如何表示约束条件规模巨大语言又是如何表示约束条件规模巨大 的规划问题呢 带着这样的疑问 让我们一步一步得看下面的内容 的规划问题呢 带着这样的疑问 让我们一步一步得看下面的内容 一 集合域一 集合域 在数学中集合的定义如下 在数学中集合的定义如下 集合 具有某种相同属性的对象放在一起 就形成了一个集合 集合 具有某种相同属性的对象放在一起 就形成了一个集合 集合中的每一个对象称作该集合的元素 集合中的每一个对象称作该集合的元素 在大规模的优化问题中 集合是必然存在的 比如在平板车建模中 各种规格在大规模的优化问题中 集合是必然存在的 比如在平板车建模中 各种规格 集装箱就可以看成一个集合 在货物配送问题中集装箱就可以看成一个集合 在货物配送问题中 154 个城市可以看成一个集合 个城市可以看成一个集合 在在 lingo 语言中 将某些对象看成一个集合便可以很方便地对集合中的每一个元语言中 将某些对象看成一个集合便可以很方便地对集合中的每一个元 素进行统一处理 素进行统一处理 集合域必须在模型的约束引用集合之前定义 集合域必须在模型的约束引用集合之前定义 集合域用关键字集合域用关键字 sets 开始 开始 endsets 结束 结束 集合分类 集合分类 基本集合定义统一语法格式 基本集合定义统一语法格式 setname member list attribute list 集合名集合名 对象名对象名 1 对象名对象名 2 对象名对象名 n 对象属性 对象属性 集合定义的几种方法集合定义的几种方法 sets row 1 20 d1 d2 dn 集合名集合名 对象名对象名 对象属性 对象属性 end sets 派生集合定义方法 派生集合定义方法 sets row 1 20 col 1 100 page 1 50 link row col k1 k2 kn trd row col page t1 t2 tn end sets K1可以表示某个省的某个城市的人口 可以表示某个省的某个城市的人口 t1可以表示某个省的某个城市某个人的收入 可以表示某个省的某个城市某个人的收入 二 数据域 二 数据域 数据域是优化问题中已知得对象的属性值 例如 人的身高 体重 车辆的载数据域是优化问题中已知得对象的属性值 例如 人的身高 体重 车辆的载 重 行驶速度 重 行驶速度 数据域以关键字数据域以关键字 data 开头 开头 enddata 结束 结束 数据域可以出现在模型中的任何地方 数据域可以出现在模型中的任何地方 data d1 k1 t1 enddata 数据域的未知数值数据域的未知数值 有时只想为一个集的部分成员的某个属性指定值 而让其余成员的该属性保持有时只想为一个集的部分成员的某个属性指定值 而让其余成员的该属性保持 未知 以便让未知 以便让 LINGO 去求出它们的最优值 在数据声明中输入两个相连的逗号去求出它们的最优值 在数据声明中输入两个相连的逗号 表示该位置对应的集成员的属性值未知 两个逗号间可以有空格 表示该位置对应的集成员的属性值未知 两个逗号间可以有空格 例例 3 8 sets years 1 5 capacity endsets data capacity 34 20 enddata 属性属性 capacity 的第的第 2 个和第个和第 3 个值分别为个值分别为 34 和和 20 其余的未知 其余的未知 实时数据处理实时数据处理 在某些情况 对于模型中的某些数据并不是定值 譬如模型中有一个通货膨胀在某些情况 对于模型中的某些数据并不是定值 譬如模型中有一个通货膨胀 率的参数 我们想在率的参数 我们想在 2 至至 6 范围内 对不同的值求解模型 来观察模型的结范围内 对不同的值求解模型 来观察模型的结 果对通货膨胀的依赖有多么敏感 我们把这种情况称为实时数据处理 果对通货膨胀的依赖有多么敏感 我们把这种情况称为实时数据处理 what if analysis LINGO 有一个特征可方便地做到这件事 有一个特征可方便地做到这件事 在本该放数的地方输入一个问号 在本该放数的地方输入一个问号 data interest rate inflation rate 085 enddata 每一次求解模型时 每一次求解模型时 LINGO 都会提示为参数都会提示为参数 inflation rate 输入一个值 在输入一个值 在 WINDOWS 操作系统下 将会接收到一个类似下面的对话框 操作系统下 将会接收到一个类似下面的对话框 直接输入一个值再点击直接输入一个值再点击 OK 按钮 按钮 LINGO 就会把输入的值指定给就会把输入的值指定给 inflation rate 然后继续求解模型 然后继续求解模型 除了参数之外 也可以实时输入集的属性值 但不允许实时输入集成员名 除了参数之外 也可以实时输入集的属性值 但不允许实时输入集成员名 三 初始域三 初始域 初始域是专门为初始化决策变量而定义的一块区域 初始域是专门为初始化决策变量而定义的一块区域 初始部分是初始部分是 LINGO 提供的另一个可选部分 在初始部分中 可以输入初始提供的另一个可选部分 在初始部分中 可以输入初始 声明 声明 initialization statement 和数据部分中的数据声明相同 对实际问题的 和数据部分中的数据声明相同 对实际问题的 建模时 初始部分并不起到描述模型的作用 在初始部分输入的值仅被建模时 初始部分并不起到描述模型的作用 在初始部分输入的值仅被 LINGO 求解器当作初始点来用 并且仅仅对求解器当作初始点来用 并且仅仅对非线性模型非线性模型有用 和数据部分指定变量的有用 和数据部分指定变量的 值不同 值不同 LINGO 求解器可以自由改变初始部分初始化的变量的值 求解器可以自由改变初始部分初始化的变量的值 一个初始部分以一个初始部分以 init 开始 以开始 以 endinit 结束 初始部分的初始声明规结束 初始部分的初始声明规 则和数据部分的数据声明规则相同 也就是说 我们可以在声明的左边同时初则和数据部分的数据声明规则相同 也就是说 我们可以在声明的左边同时初 始化多个集属性 可以把集属性初始化为一个值 可以用问号实现实时数据处始化多个集属性 可以把集属性初始化为一个值 可以用问号实现实时数据处 理 还可以用逗号指定未知数值 理 还可以用逗号指定未知数值 init X Y 0 1 endinit Y log X X 2 Y 2 1 好的初始点会减少模型的求解时间 好的初始点会减少模型的求解时间 四 集合循环函数四 集合循环函数 统一语法格式 统一语法格式 function setname set index list condition expression list 其中 其中 function 是集合函数名 是是集合函数名 是 FOR MAX MIN PROD SUM 五种之一 五种之一 setname 是集合名 是集合名 set index list 是集合索引列表 不需使用索引时可以省略 是集合索引列表 不需使用索引时可以省略 condition 是逻辑表达式描述的过虑条件 通常含有索引 无条件时可省略 是逻辑表达式描述的过虑条件 通常含有索引 无条件时可省略 expression list 是一个表达式 对是一个表达式 对 FOR 函数 可以是一组表达式 函数 可以是一组表达式 五个集合函数名的含义如下 五个集合函数名的含义如下 FOR 集合元素循环函数 对集合 集合元素循环函数 对集合 setname 的每个元素独立地生成表达式 的每个元素独立地生成表达式 表达式表达式 由由 expression list 描述 通常是优化问题的约束 描述 通常是优化问题的约束 MAX 集合属性的最大值函数 返回集合 集合属性的最大值函数 返回集合 setname 上的表达式的最大值 上的表达式的最大值 MIN 集合属性的最小值函数 返回集合 集合属性的最小值函数 返回集合 setname 上的表达式的最小值 上的表达式的最小值 PROD 集合属性的乘积函数集合属性的乘积函数 返回集合 返回集合 setname 上的表达式的积 上的表达式的积 SUM 集合属性的求和函数 返回集合 集合属性的求和函数 返回集合 setname 上的表达式的和 上的表达式的和 对应数学表达式与对应数学表达式与 LINGO 命令 命令 数学表达式数学表达式lingo 命令命令 一维数组和一维数组和 1 sum row i x i 二维维数组和二维维数组和 1 1 sum links i j x i j 矩阵点乘和矩阵点乘和 1 1 sum links i j x i j Y i j 求数组的积求数组的积 1 prod row i x i 1 1 1 2 比较 比较 m 个一维数组的和 个一维数组的和 for col j sum row i x i 5 1 1 sum links i j j GE 5 x i j 1 1 0 sum links i j x i j NE 0 x i j Y i j 1 0 prod row i x i NE 0 x i 七 基本的数学函数七 基本的数学函数 在在 LINGO 中建立优化模型时引用大量的内部函数这些函数以中建立优化模型时引用大量的内部函数这些函数以 号打头 号打头 LINGO 中包括相当丰富的数学函数中包括相当丰富的数学函数 这些函数的用法非常简单这些函数的用法非常简单 我们直接在下一一我们直接在下一一 列出列出 ABS X 绝对值函数绝对值函数 返回返回 X 的绝对值的绝对值 COS X 余弦函数余弦函数 返回返回 X 的余弦值的余弦值 X 的单位是弧度的单位是弧度 EXP X 指数函数指数函数 返回返回 x e 的值的值 其中其中 e 为自然对数值的底为自然对数值的底 即即 2 FLOOR X 取整函数取整函数 返回返回 X 的整数部分的整数部分 向最靠近向最靠近 0 的方向取整的方向取整 LGM X 返回返回 X 的伽马的伽马 Gamma 函数的自然对数值函数的自然对数值 当当 X 为整数时为整数时 LGM X LOG X 1 当当 X 不为整数时不为整数时 采用线性插值得到结果采用线性插值得到结果 LOG X 自然对数函数自然对数函数 返回自然对数值返回自然对数值 MOD X Y 模函数模函数 返回返回 X 对对 Y 的取模的结果的取模的结果 即即 X 除以除以 Y 的余数的余数 这里这里 X 余余 Y 应是整数应是整数 POW X Y 指数函数指数函数 返回返回 yX 的值的值 SIGN X 符号函数符号函数 返回返回 X 的符号值的符号值 X 0 时返回时返回 1 SIN X 正弦函数正弦函数 返回返回 X 的正弦值的正弦值 X 的单位是弧度的单位是弧度 95 SMAX list 最大值函数最大值函数 返回一列数返回一列数 list 的的 最大值最大值 SMIN list 最小值函数最小值函数 返回一列数返回一列数 list 的的 最小值最小值 SQR X 平方函数平方函数 返回返回 X 的的 平方即平方即 X X 的值的值 SQRT X 平方根函数平方根函数 返回返回 X 的的 平方根的值平方根的值 TAN X 正切函数 返回 正切函数 返回 X 的正切值 的正切值 X 的单位是弧度 的单位是弧度 八 八 lingo 中其他常用命令中其他常用命令 WRAP I N 当当 I 为于区间为于区间 I N 内时直接返回内时直接返回 I 一般地 返回 一般地 返回 J I K N 其中 其中 J 位于区间位于区间 1 N K 为函数 可见这个函数相当于数学上用为函数 可见这个函数相当于数学上用 I 对对 N 取模函数的值取模函数的值 1 即 即 WRAP I N MOD I N 1 此函数对此函数对 N 1 无定义 无定义 SIZE set name 返回数据集返回数据集 set name 中包含元素的个数 中包含元素的个数 IF logical condition true result false result 当逻辑表达式当逻辑表达式 logical condition 的结果为真时 返回的结果为真时 返回 true result 否则返回否则返回 false result 例如例如 if x LT 100 20 15 语句 当语句 当 X 100 时 返回时 返回 20 否则返回 否则返回 15 WARN text logical condition 如果逻辑表达式如果逻辑表达式 logical condition 的结果为真的结果为真 显示显示 text 信息信息 USER user determined arguments 该函数是允许用户自己编写的函数该函数是允许用户自己编写的函数 dl 或或 0bj 文件文件 该用户函数可能当用该用户函数可能当用 C 或或 FORTRAN 等其他语言编写并编译等其他语言编写并编译 返回值为用户函数计算的结果返回值为用户函数计算的结果 从编程角度来从编程角度来 看看 USER 函数包含两个参数 第一个用于指定参数个数 第二个用于指定参函数包含两个参数 第一个用于指定参数个数 第二个用于指定参 数向量 而在数向量 而在 LINGO 中调用中调用 USER 时则直接指定对应的参数时则直接指定对应的参数 user determined 类似于 类似于 C 语言中的语言中的 main argc argv 的编程和运行方式 的编程和运行方式 更更 多细节请参考多细节请参考 LINGO 使用手册使用手册 九 文件读写九 文件读写 1 复制和粘贴功能复制和粘贴功能 对于数据量不是很大的集合而言 复制粘贴是最快捷最简单的方法 和其对于数据量不是很大

温馨提示

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

最新文档

评论

0/150

提交评论