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.暂时后用了,其他的知乎关注日知

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值