OPL语言的学习

编程入门 行业动态 更新时间:2024-10-10 08:18:33

OPL<a href=https://www.elefans.com/category/jswz/34/1770116.html style=语言的学习"/>

OPL语言的学习

1OPL语言

OPL语言用来编制模型文件和数据文件。

  • 项目文件:组织模型和数据的文件
  • 模型文件:声明数据项目
  • 数据文件:在模型中声明的数据初始化
  • 设置文件:保存用户定义的值
  • 运行配置:根据项目进行的设置

1.1模型文件

包括数学建模的四个要素:数据、决策变量、目标函数、约束条件

主要关键字:

  • string  {string}变量名={”字符串1“,”字符串2“,”字符串3“...}                                                      示例:{string}Products={"gas","chloride","shit"};
  • float   定义小数  float 变量名[对应字符串数组变量名]=[数值1,数值2,...]                                示例:float f=1.21;                                                                                                                                 float Price[Products] =[90,100];                                                                                                   float Demands[Products][Money] = [[1,3,0][1,4,0]];
  • int      定义整数  int 变量名[对应关键字数组数组变量名] = [数值1,数值2,...];                          示例: int M=1000;                                                                                                                   
  • range  定义一段连续的整型数据范围     range  变量名 = start...end;                                                     示例:range jobnum=1..N;
  • dvar   定义决策变量    dvar 数据类型函数(+/-)  变量名 ;                                                         示例:dvar float S[location];
  • Maximize/Minimize  目标函数表达式                                                                                             示例:minimize Lmax;
  • subject to   约束  subject to {约束1名称:约束;....}                                                                     示例:subject to{
        forall(k in location)
          sum(j in jobnum)x[k][j] == 1;
    }
  • forall   使用forall可以生成多个条件表达式                                                                                   标准的forall循环:
    subject to {forall (c in Components)sum (p in Products) demand[p][c] * production[p] <= stock[c];
    }

    forall循环可以包含条件语句:

    subject to {forall (c in Components) {if (...) {...}}
    }

    OPL提供了forall的过滤器写法:

    subject to {forall (i in 1..10 : mydata[i] <= 10) {...}
    }

语言基本组成:

  • 多行注释   /*   This is a multiline  comment */
  • 单行注释   //my book
  • 预处理指令(可选)   execute{     writeln('start reducing')  }    暂时不懂这个是干嘛的
  • 后处理指令 (可选)
    execute {if (cplex.getCplexStatus() == 1) {writeln('reduced cost of x= ', x.reducedCost)writeln('reduced cost of y= ', y.reducedCost)} 
    }

1.2数据文件

与模型文件相对应,模型数据中的....在数据文件中应该使用具体的数据,数据类型为字符串类型,各数据之间使用空格或逗号隔开;如果不加#数据必须有变量名,否则数据必须是有序的;示例:

Products = {"gas", "chloride"};
Fixed = 30;
Profit = #["chloride":40, "gas":30]#;

2.暂时后用了,其他的知乎关注日知

更多推荐

OPL语言的学习

本文发布于:2024-02-14 04:12:24,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1761590.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:语言   OPL

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!