Originally posted by: Rym
I think that i have a problem in the composition of the problem: I want to minimize the quantity of resource wastage in all physical machines (j) j:1..p. Within each physical machine, there is a set of virtual machines (i).i:1..v
The physical machine is composed with different resources (cpuj,ramj,diskj).
The virtual machine is composed with different resources (cpui,rami,diski).
The quantity of resource wastage is calculated as follow: ∑(Rji −Rjk),i ̸= k;
The decision variable is lumda [i][j]: the virtual machine i is hosted in phyiscal machine j.
Hwo to incorporate the R[P][D] matrix in the model ???
The R[P][D]--> sum (j in p) (R[j][1]=cpuj[j];R[j][1]=ramj[j];R[j][3]=diskj[j]);
The following model is correct ?
int v = ...;
range V = 1..v;
int p=50;
int d=3;
range P = 1..p;
range D = 1..d;
string vms[1..v]=... ;
int cpuj[P];
int ramj[P];
int diskj[P];
int cpui[V];
int rami[V];
int diski[V];
int VMmin=1;
int VMmax=4;
string S[VMmin..VMmax]=["s","m","l","xl"];
{string} VMTypes={S[v] | v in VMmin..VMmax};
tuple PM
{
int npm;
string nvm;
}
execute VMS
{
var ofilevms = new IloOplOutputFile("resvmss.txt");
writeln("vms=",vms);
for (var i in vms)
{ ofilevms.write("'",vms[i],"',");
if(vms[i]=="s")
{
cpui[i]=1;
rami[i]=2;
diski[i]=50;
counts++;
}
else if(vms[i]=="m")
{
cpui[i]=2;
rami[i]=4;
diski[i]=105;
countm++;
}
else if(vms[i]=="l")
{ cpui[i]=4;
rami[i]=7;
diski[i]=150;
countl++;
}
else
{
cpui[i]=8;
rami[i]=14;
diski[i]=250 ;
countxl++;
}
}
writeln(cpui);
writeln(rami);
writeln(diski);
};
execute PMS
{
for (var i in P)
{
cpuj[i]=21;
ramj[i]=40;
diskj[i]=1000;
}
writeln(cpuj);
writeln(ramj);
writeln(diskj);
};
//the model/problem definition
dvar boolean lumda[V][P];
dexpr W=(R[j][d]-min(R[j][k]));
dexpr int O = sum( i in V, j in P) lumda[i][j];
dexpr int ODPVMType[vtype in VMTypes]=sum( i in V, j in P:vms[i]==vtype) lumda[i][j];
dexpr int OP = sum( j in P) phy[j];
dexpr float RW = sum (i in V,j in P,d in D, k in D:d!=k) lumda[i][j]*W.
minimize RW;
subject to{
//une machine virtuelle est hébergée par au plus une seule pm
limit:
forall( i in V)
sum( j in P ) lumda[i][j] <= 1;
//la quantité de cpu consommée par les vms ne depasse pas la quantité de cpu de la pm j
cpur:
forall( j in P)
sum( i in V) cpui[i]*lumda[i][j] <= cpuj[j];
//la quantité de ram consommée par les vms ne depasse pas la quantité de ram de la pm j
ramr:
forall( j in P)
sum( i in V) rami[i]*lumda[i][j] <= ramj[j];
//la quantité de disk consommée par les vms ne depasse pasla quantité de disk de la pm
diskr:
forall( j in P)
sum( i in V) diski[i]*lumda[i][j] <= diskj[j];
#DecisionOptimization#OPLusingCPLEXOptimizer