2016-04-14 92 views
0

我想将一个不同大小的四个数组合并到一个数组(subVolume)中。该数组应该包含12个对应于输入字符串的浮点值。追加函数对我不起作用,因为它只适用于整数值。对此进行编码的正确方法是什么?在CPLEX中合并数组OPL

{string} drySegment = ...; 
{string} liquidSegment = ...; 
{string} breakSegment = ...; 
{string} contSegment = ...; 
{string} subSegment = ...; 

dvar float dryVolume[drySegment]; 
dvar float liquidVolume[liquidSegment]; 
dvar float breakVolume[breakSegment]; 
dvar float contVolume[contSegment]; 
dvar float subVolume[subSegment]; 

回答

1

那么你可以尝试

{string} s1={"1","2"}; 
{string} s2={"3","4"}; 

dvar float f1[s1]; 
dvar float f2[s2]; 

{string} s12=s1 union s2; 

dexpr float f12[i in s12]=(i in s1)?f1[i]:f2[i]; 

subject to 
{ 
f1["1"]==1.1; 
f1["2"]==1.2; 
f2["3"]==1.3; 
f2["4"]==1.4; 
} 

execute 
{ 
writeln(f12); 
} 
0

你可以尝试

{string} s1={"1","2"}; 
{string} s2={"3","4"}; 
float f1[s1]=[0.6,0.8]; 
float f2[s2]=[0.66,0.88]; 
{string} s12=s1 union s2; 
float f12[i in s12]=(i in s1)?f1[i]:f2[i]; 

execute 
{ 
    writeln(f12); 
} 

这给[0.6 0.8 0.66 0.88]

+0

这并不在我的情况下工作,因为F1(或dryVolume)是一个决策变量。这个变量不是固定的,而是之前计算的。 – FabianW