在初步了解了关于相关数据结构之后,在来学习下如何进行数据初始化及变量约束等内容。
目录
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 { }