文章目录

  • 1、参数\集合和变量定义
  • 2、目标和约束的书写
  • 3、求解命令
  • 4、AMPL调用不同求解器的Options目录
  • 未完待续~

\qquad 最近再搞一些模型,需要用到AMPL中不同的求解器进行验证求解,故建立本博客,用于随时整理AMPL的相关语法和命令,方便后续查阅,也方便同在使用AMPL的小伙伴参考~
\qquad AMPL将模型和数据进行分离,书写一个模型的时候需要完成一个 .mod
文件和一个 .dat文件的书写,在 .mod书写模型参数,变量,目标,约束等要素,在 .dat文件中书写参数的取值。

1、参数\集合和变量定义

\qquad 单个参数定义方式为:

param 参数;
#示例,定义一个名为n的参数
param n;

\qquad 集合定义方式为:

set  = 范围;
#示例,定义一个0到n的集合V
set V = 0..n;

\qquad 集合参数定义方式为:

param 参数{集合};
#示例,定义一个包括0到n个元素的参数集合L
param L{V} >= 0;    #注释:后面的>=0表示集合中参数的取值范围非负

\qquad 变量定义方式为:

var 变量名{集合} 类型;
#示例,定义一个(0,1)变量x,x包括三个维度的下标,每个维度的大小均为0到n
var x{V,V,V} binary;

2、目标和约束的书写

\qquad 目标的书写,以最小化某个目标obj为例,如下所示:

minimize 目标名: 目标表达式;
minimize obj: 5*sum(i in V, j in V, k in V)x[i,j,k];

\qquad 约束的书写,以每个变量x均不小于5,并且对x第一维度的求和值不大于20,为例,如下所示:

约束名{枚举范围}:sum{求和范围} 约束表达式;
C1{i in V,  j in V, k in V}x[i,j,k]>=5;
C2{i in V}: sum{j in V, k in V}x[i,j,k]<=20;

3、求解命令

\qquad 基本求解命令包括模型加载,数据加载,求解器选择,和求解四步,如下所示:

model ***.mod
data ***.dat
option solver cplex; #可以选择各种求解器,cplex gurobi xpress lingo baron等,官网有不同的价位,也有免费的cbc ipopt等可以使用
solve;

\qquad 展示求解时间信息,在AMPL用户手册中,提到了如下几种求解器求解相关的时间:

_solve_elapsed_time:  elapsed seconds for most recent solve command
_solve_system_time:  system CPU seconds used by most recent solve command
_solve_user_time:  user CPU seconds used by most recent solve command
_solve_time:  _ solve _ system _ time + _ solve _ user _ time

\qquad 笔者通过测试和与gurobi单独求解的时间对比,发现_solve_system_time比较接近真实的模型求解时间,所以可以使用_solve_system_time作为模型求解的时间,在模型求解完毕之后,通过display _solve_system_time获取到这个时间值。

4、AMPL调用不同求解器的Options目录

\qquad 在使用AMPL调用不同求解器时,可以通过命令行,给求解器定义不同的求解参数,如限制求解时间等。首先给出使用AMPL给求解器给定options的命令如下所示:

option SolverName_options '命令=**';
e.g., option gurobi_options 'timelim=7200'; #限定gurobi求解时间最多为7200s

\qquad 下面笔者整理了一些求解器的options网址,有需要可以自行查看所需要的命令。
\qquad AMPL官方给出了一个不太全的求解器options参考:https://dev.ampl.com/solvers/gurobi/index.html
\qquad Gurobi官网给出的AMPl 的options参考:https://www.gurobi.com/documentation/9.5/ampl-gurobi/parameters.html
\qquad Octeract官网给出的AMPl 的options参考:https://octeract.gg/docs/octeract-engine-options/options-reference/

未完待续~

AMPL IDE语法整理相关推荐

  1. Markdown语法整理(详细版)

    Markdown语法整理 目录 文章目录 1 概述 1.1 Markdown 1.2 Typora 2 标题和目录 2.1 标题 2.2 目录 3 段落和文本 3.1 缩进.对齐 3.3 斜体.粗体 ...

  2. 数据库语法整理及WAF绕过方式

    数据库语法整理及WAF绕过方式 原文链接请点击:https://www.cnblogs.com/ruoli-s/p/15355611.html 关系型数据库 关系型数据库:指采用了关系模型来组织数据的 ...

  3. 考研语法整理(简洁版)

    考研语法整理(简洁版) 1简单句     1.1简单句的核心         1.1.1简单句的核心构成                 (1)主+谓                      主语+ ...

  4. scss 基本语法整理

    scss 基本语法整理 scss 基本使用 Variables 变量 嵌套 Nesting 普通嵌套 调用父选择器 属性嵌套 混合 Mixins 基本使用 携带参数 继承 extend 导入 impo ...

  5. velocity模板引擎-vm语法整理

    velocity模板引擎-vm语法整理 模板引擎我目前接触过两次, 第一次是在前后端还未分离时,考虑到部分页面数据比较固定,一定时间内不会变动,这样每次从后台加载数据渲染页面明显会消耗性能以及资源浪费 ...

  6. 前端ES6的语法整理

    前端ES6的语法整理 这个东东出很久了,一直没时间完整的学习整理一下. 加上现在前端的更新又特别的快,新的前端框架的东西,都需要用这个语法了,不然很多东西甚至就开始看不懂了. 2022-05-15 小 ...

  7. Python数据处理相关语法整理

    Python数据处理相关语法整理 简介 Python自身特性总结 编程Tips 拿到新电脑配环境时做的事: 一些加速python代码的技巧 Python项目代码结构 量化策略指标计算 绝对收益率 最大 ...

  8. jQuery插件之【jqGrid】常用语法整理-【更新】

    jqGrid常用语法整理,包含数据获取.常用函数.触发事件等 jqGrid表格数据获取相关语法 获取表格所有数据  $("#grid").jqGrid("getRowDa ...

  9. pythonclass语法_【python类别概念自学】class的语法整理(继承、抽象类别、魔术方法)...

    class)这个概念在很多程序语言中都会出现, 感觉上挺值得一学的, 对于管理大型程序分工上也蛮有帮助的. 之前小马在自学c++时也碰到这个概念: [c++类别class的语法大全](1) 物件导向概 ...

最新文章

  1. WebStorm配置本地测试服务器
  2. 上市 10 天就遭破解!AirTag 还能买吗?
  3. Java集合(一)、什么是Java集合?
  4. 基于VSM的命名实体识别、歧义消解和指代消解
  5. 第十六章:Java内存模型——Java并发编程实战
  6. python关机linux_Python学习第157课——Linux切换用户、关机、查看正在运行的程序...
  7. js 判断 ““,null,undefined
  8. Jmeter系列之接口断言
  9. Tipard Mac Video Converter Ultimate如何在Mac上转换DVD 视频?
  10. php ftp上传文件 源码,PHP FTP上传文件
  11. [哈佛幸福课13 听后感]
  12. 恒生电子 招聘FPGA开发/验证工程师
  13. 拖欠银行贷款的后果有哪些
  14. 美国国家机器人计划2.0部分项目简介
  15. Linux——Vim编辑器三种模式(命令模式、输入模式、末行模式)的基本使用总结
  16. 新浪微相册https外链图片无法调用解决方法
  17. 从菜鸟到大神之自动化测试(基础一)
  18. android时间选择原生,安卓原生时间选择器
  19. RP Fiber Power 免费讲座---光纤激光器仿真设计
  20. drawRect绘图

热门文章

  1. Java SE 基础(4) Java的语言特点
  2. MySQL for mac傻瓜式教程
  3. [Pytorch函数].repeat()
  4. 基于Java的员工管理系统
  5. 苹果推出iPhone 12维修计划,解决无声音问题
  6. AES加解密算法详解
  7. Drill 学习笔记之 入门体验
  8. 学习python的方法
  9. 阿里云code上传代码
  10. 宁波大学 软件技术exp_2_1 (1)