用于优化问题的建模语言

  1. AMPL (A Mathematical Programming Language) AMPL 是一种专门用于描述数学规划和优化问题的高级建模语言。它提供了简洁而强大的语法,可以描述线性规划、整数规划、非线性规划等各种类型的优化问题,并且可以与多种优化求解器进行集成。

    1. 优点:
      • 清晰、简洁的语法,易于学习和使用。
      • 支持多种优化问题类型,包括线性规划、整数规划、非线性规划等。
      • 良好的求解器支持,可以与多种优化求解器进行集成。
    2. 缺点:
      • 商业许可证费用较高。
    3. 适用场景:
      • 需要快速建立和求解优化问题模型的项目。
      • 对求解器的选择有一定自由度。
  2. GAMS (General Algebraic Modeling System): GAMS 是另一种流行的优化建模语言,它提供了高度抽象的语法来描述复杂的优化问题。GAMS 支持线性规划、整数规划、非线性规划等多种类型的优化问题,并且可以与多种求解器进行交互。

    1. 优点:
      • 高度抽象的语法,适用于描述复杂的优化问题。
      • 多种优化问题类型的支持。
      • 良好的求解器集成能力。
    2. 缺点:
      • 商业许可证费用较高。
      • 学习曲线较陡。
    3. 适用场景:
      • 需要描述复杂的优化问题,并且需要与多个求解器进行交互的项目。
  3. JuMP (Julia for Mathematical Programming): JuMP 是一个在 Julia 编程语言中实现的优化建模语言。它提供了直观而灵活的语法,可以描述各种类型的优化问题,并且可以利用 Julia 的高性能计算能力进行求解。

    1. 优点:
      • 灵活、直观的语法。
      • 利用 Julia 的高性能计算能力,适用于大规模优化问题。
      • 免费开源。
    2. 缺点:
      • Julia 的生态系统相对较小,可能缺乏一些成熟的工具和库。
    3. 适用场景:
      • 对性能要求较高的项目,如大规模优化问题。
      • 希望利用开源工具的项目。
  4. Pyomo: Pyomo 是一个在 Python 编程语言中实现的优化建模语言。它提供了丰富的功能来描述线性规划、整数规划、非线性规划等各种类型的优化问题,并且可以与多种优化求解器进行交互。

    1. 优点:
      • 在 Python 生态系统中,与其他库和工具的集成性好。
      • 多种优化问题类型的支持。
      • 免费开源。
    2. 缺点:
      • 在大规模问题上可能性能不如 JuMP 等语言。
    3. 适用场景:
      • 对 Python 生态系统熟悉的项目。
      • 需要多种优化问题类型的支持。
  5. CVXPY: CVXPY 是一个用于凸优化建模的 Python 库。它提供了简洁而直观的语法,可以描述凸优化问题,并且可以利用多种优化求解器进行求解。

    1. 优点:
      • 用于凸优化的简洁语法。
      • 利用 Python 生态系统中丰富的库和工具。
      • 免费开源。
    2. 缺点:
      • 只适用于凸优化问题。
    3. 适用场景:
      • 需要解决凸优化问题的项目。
      • 对简单、直观的建模语法有要求的项目。
The General Algebraic Modeling System (GAMS)是一款数学规划和优化的高级建模系统。   GAMS是最佳化的计算机数值分析商业软件相当普遍,如 LINDO、DOT 等,以矩阵运算见长的 MATLAB 计算机软件亦有发展"optimization tool box",可以解各种非线性最佳化问题的数值解。这里要介绍的最佳化的计算机数值分析商业软件 GAMS,则是以简单清楚的使用者接口和强健稳定的数值分析能力见长。   通用代数建模系统(GAMS)是特别为建模线性,非线性和混合整数最优化问题而设计的.本系统对于大型的,复杂的问题特别有帮助.GAMS可以运行在个人计算机、工作站、大型机和超级计算机上.   GAMS允许使用者通过制定简单的设置来把精力放在建模问题上.至于特定机器和系统软件执行的费时的细节将由GAMS系统来处理.   GAMS对于处理大型的,复杂的,需要多次修订才能最终确定精确模型的独一无二的问题特别有帮助.系统以高 度简洁和自然的方式来建模问题.使用者能够快速和方便的更改公式,能从一个求解器转到另一个,甚至稍加费心就能从线性转换到非线性.   GAMS让使用者把精力集中到建模上.通过排除考虑纯技术上的机器特定的问题的需要,比如地址计算,存储分配,子程序链接,和输入输出和流程控制,GAMS增加了用于概念化和运行模型,和分析结果的时间.GAMS本身构建了良好的建模习惯,通过请求简明而精确的实体和关系的规范.GAMS语言形式上和通常使用的编程语言相似.因此对于那些有编程检验的使用者将非常熟悉.   使用GAMS,数据仅仅需要一次就能在熟悉的列表和表格形式中输入.模型以简练的代数声明来描述,对于人和机器都很容易读懂.非常相关的约束的整个集合都被输入到一个声明中.GAMS自动生成每个约束等式,并让使用者处理例外情况,假使那里一般来说是不需要的.在模型中的声明能够被重用,而不需要更改代数式,当其它的实例是相同的或出现了相关问题.错误的位置和类型会在尝试解决方案前被查明.GAMS处理动态模型,包括时间序列,滞后,及暂时终点的提示和处理.   GAMS是灵活而强大的.模型可以非常方便的从一个计算机平台移到另外一个,只要GAMS已经在每个平台被安装好.GAMS很容易进行敏感度分析.使用者能够方便的规划模型来求解一个成分的不同值,然后生成一个输出报告,列出了每种情况的解决方案特征.模型能够同时被开发和文档化,因为GAMS允许使用者包含解释性的文本来作为任意符号和等式的定义和解释.   GAMS不断的在被增强和扩展.2.25版本包含了多个语言扩展,例如在一个循环中的SOLVE声明,INCLUDE声明,IF-ELSE声明,和使用PUT声明进行报告编写的功能.其它的加强包括增加的系统集成特征,性能改善,新的子系统,和另外的计算机平台支持.   当前版本2.50包括一个基于Intel Windows平台(95/98/ME和NT/2K/XP)的集成开发环境(IDE).GAMS 2.50的新的分发包含新的语言特征和新发表的全新/更新的求解器,一年至少4次.请检查版本声明.   示例:   从著名的1963书(由George Dantzig编写)中提取的一个运输问题,用来描述GAMS的有效性.这个模型只是模型库中的部分,模型库中还包含了大量的完整GAMS模型.   支持模型的类型:   GAMS模型类型包括LP,MIP和NLPs的不同形式.这里列出了GAMS支持的所有的模型类型.   GAMS 的发展背景   GAMS 是"General Algebraic Modeling System"(一般性代数仿真系统)的缩写,最早是由美国的世界银行(World Bank)的 Meeraus 和 Brooke [Brooke, Kendrickm and Meeraus, 1992]所发展。"GAMS"事实上并不代表任何最佳化数值算法,而只是一个高级语言的使用者接口,利用 GAMS 可以很容易建立、修改、除错你的最佳化模型输入文件,而输入档经过编译后,成为较低阶的最佳化数值算法程序所能接受的格式,再加以执行并写出输出档。   数值算法方面,对线性与非线性规划问题,GAMS 使用由新南韦尔斯大学的Murtagh、及史丹福大学的 Gill、Marray、Saunders、Wright 等所发展的 MINOS [Murtagh and Saunders, 1983] 算法。MINOS是 "Modular In-core Non-linear Optimization System"的缩写,这个算法综合了缩减梯度法和准牛顿法,是专门为大型、复杂的线性与非线性问题设计的算法。对混合整数规划问题,则采用亚历桑那大学的 Marsten 及巴尔第摩大学的 Singhal[1987]共同发展的 ZOOM(Zero/One Optimization Method)算法。   GAMS 使用范例说明   如前所述,GAMS 本身有非常完整的英文版使用者手册,GAMS 的计算机软件中也附带了许多学习范例的档案。这里所作的 GAMS 使用范例说明,目的绝非在取代原版的使用者手册,而是要配合本课程说明的形式,重新编写使用范例输入文件,使读者能很快的进入情况,了解其使用程序。   GAMS 的操作大抵可分为三个步骤:建立 GAMS 输入文件,执行 GAMS 程序,检视 GAMS 输出档内容。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值