在初步了解了关于相关数据结构之后,在来学习下如何进行数据初始化及变量约束等内容。


目录


1、变量数据初始化


1.1、数组的数据初始化


1.1.1、声明直接赋值法


1.1.2 、.dat文件分离赋值法


1.1.3、(index,value)方式赋值


1.1.4、脚本语言赋值法


1.2、元组数据初始化


1.3、集合数据初始化


2、决策变量


3、表达式


4、约束


1、变量数据初始化

1.1、数组的数据初始化

数组的初始方式比较多,这里重点讲述重点的几种方式。

1.1.1、声明直接赋值法

float fixedCost[1..4] = [200,300,400,500];    对于实数类别

{string} Products = {“gas”,”chloride”};


string 声明自符串数组

1.1.2 、.dat文件分离赋值法

这种方式需要结合两种文件一起完成,包括.mod文件以及.data文件

其中 .mod文件中使用 … 表示待赋值。具体的实现方式举例为:

在.mod文件中:float fixedCost[1..4] = …;

在.dat文件里:

fixedCost= [200,300,400,500];

1.1.3、(index,value)方式赋值

这种方式需要用#[  ]#的方式,其中

元素次序可以随意安排。

{string} days = {“Mon”, “Tue”, “Wen”};

float costs[days] = …;

在.dat文件里:

costs = #[“Mon”:200, “Wen”: 140 , “Tue”:300]#;

float transCost[1..2][1..4] = …;

在.dat文件里:

transCost = #[2:[600,700,800,900], 1:[200,300,400,500]]# ;

1.1.4、脚本语言赋值法

range dcs=1..10;

int  setCost[dcs];

execute {

for(var n in dcs) {

setCost[n] = 2*n +1;

}

}

简化为:

range dcs=1..10;

int  setCost[ n in dcs] =2*n+1;

1.2、元组数据初始化

单个变量初始化直接用<..>赋值

tuple TTruck {


key int id;

float fixedCost;

float capacity;

}


TTruck truck1 =<1,200,4000>

1.3、集合数据初始化

用一对{ }进行数据初始化

tuple TRetailer{


string name;

float demand;

float serviceTime;

}


{TRetailer} retailers =

{<“r1”,2000,15>, <“r2”, 3000,20>};

2、决策变量

使用关键字 dvar来定义决策变量

{string} dcs = {“dc1”,”dc2”,”dc3” };

dvar int x[dcs] in 0..1;

表示是否开启某个配送中心, 1为开启,0为关闭

可以使用 + 关键字限制决策变量只能为正

dvar int+ x; 等价于  dvar int x in 0..maxInt;

dvar float+ y; 等价于  dvar float y in 0..infinity;

dvar boolean z; 等价于  dvar int z in 0..1;

3、表达式

表达式可以分为三种类型,包括


  • 整形表达式

  • 浮点表达式

  • 条件表达式

这里重点介绍条件表达式

(condition)?thenExpr : elseExpr;

int n=…;

int signValue = (n>0)?1: (n<0)?-1:0;

4、约束

约束的位置:目标函数必须位于约束前面

  • 约束应放到  subject to { }
  • 可以对约束命名,也可以不用命名;

maximize obj =  sum(p in products) profit[p] * quanity[p]

subject to { }



版权声明:本文为qq_20412595原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_20412595/article/details/130998373