本文整理汇总了C++中IloRangeArray::add方法的典型用法代码示例。如果您正苦于以下问题:C++ IloRangeArray::add方法的具体用法?C++ IloRangeArray::add怎么用?C++ IloRangeArray::add使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IloRangeArray
的用法示例。
在下文中一共展示了IloRangeArray::add方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: CreateStorageBindingConstraint
void CreateStorageBindingConstraint(IloModel model, BoolVar3DMatrix L, BoolVarMatrix M,
BoolVarMatrix X, BoolVar3DMatrix R, BoolVarMatrix Y,
IloRangeArray c){
IloEnv env = model.getEnv();
//The nested for-loops generate L[p][i][t]
//that is required to linearize equation 16
for(int p = 0; p < L.getSize(); p++){
for(int i = 0; i < n; i++){
for(int t = 0; t < T_MAX; t++){
L[p][i].add(IloBoolVar(env));
c.add(L[p][i][t] - M[p][i] - X[i][t] >= -1);
c.add(L[p][i][t] - M[p][i] - X[i][t] <= 0);
c.add(L[p][i][t] + M[p][i] - X[i][t] <= 1);
c.add(L[p][i][t] - M[p][i] + X[i][t] <= 1);
}
}
}
//Contructing the array R[p][e][t]
for(int p = 0; p < R.getSize(); p++){
for(int e = 0; e < E; e++){
for(int t = 0; t < T_MAX; t++){
R[p][e].add(IloBoolVar(env));
}
}
}
//Encoding the constraint eqn-15
for(int t = 0; t < T_MAX; t++){
IloExprArray sum(env);
for(int e = 0; e < E; e++){
sum.add(IloExpr(env));
for(int p = 0; p < n_m; p++){
sum[e] += R[p][e][t];
}
c.add(sum[e] - Y[e][t] == 0);
}
}
//Encoding the constraint eqn-21
for(int t = 0; t < T_MAX; t++){
IloExprArray sum1(env);
IloExprArray sum2(env);
for(int p = 0; p < n_m; p++){
sum1.add(IloExpr(env));
sum2.add(IloExpr(env));
for(int e = 0; e < E; e++)
sum1[p] += R[p][e][t];
for(int i = 0; i < n; i++)
sum2[p] += L[p][i][t];
c.add(sum1[p] - n_r*sum2[p] <= 0);
}
}
return;
}
示例2:
static void
populatebyrow (IloModel model, IloNumVarArray x, IloRangeArray c)
{
IloEnv env = model.getEnv();
x.add(IloNumVar(env, 0.0, 40.0));
x.add(IloNumVar(env));
x.add(IloNumVar(env));
x.add(IloNumVar(env, 2.0, 3.0, ILOINT));
model.add(IloMaximize(env, x[0] + 2 * x[1] + 3 * x[2] + x[3]));
c.add( - x[0] + x[1] + x[2] + 10 * x[3] <= 20);
c.add( x[0] - 3 * x[1] + x[2] <= 30);
c.add( x[1] - 3.5* x[3] == 0);
model.add(c);
} // END populatebyrow
示例3: IloMaximize
static void
populatebynonzero (IloModel model, IloIntVarArray x, IloRangeArray c)
{
IloEnv env = model.getEnv();
IloObjective obj = IloMaximize(env);
int n, a;
scanf("%d", &n);
scanf("%d", &a);
//restrição
c.add(IloRange(env, -IloInfinity, a));
//variaveis
for(int i=0 ; i<n; i++){
x.add(IloIntVar(env, 0, 1));
}
/*x.add(IloIntVar(env, 0.0, 40.0));
x.add(IloIntVar(env));
x.add(IloIntVar(env));*/
/*obj.setLinearCoef(x[0], 1.0);
obj.setLinearCoef(x[1], 2.0);
obj.setLinearCoef(x[2], 3.0);*/
/*restricoes*/
for(int i=0 ; i<n; i++){
scanf("%d", &a);
c[0].setLinearCoef(x[i], a);
}
//objetivo
for(int i=0 ; i<n; i++){
scanf("%d", &a);
obj.setLinearCoef(x[i], a);
}
/*c[0].setLinearCoef(x[1], 1.0);
c[0].setLinearCoef(x[2], 1.0);
c[1].setLinearCoef(x[0], 1.0);
c[1].setLinearCoef(x[1], -3.0);
c[1].setLinearCoef(x[2], 1.0);*/
c[0].setName("c1");
for(int i=0; i<n; i++){
char tmp[10];
printf("x%d", i+1);
x[i].setName(tmp);
}
model.add(obj);
model.add(c);
} // END populatebynonzero
示例4: generateProblem
void generateProblem(const ILPModel& m, IloModel& model, IloNumVarArray& x, IloRangeArray& con) {
IloEnv env = model.getEnv();
IloObjective obj = (m.obj == MINIMIZE ? IloMinimize(env) : IloMaximize(env));
for (unsigned long v = 0; v < m.numberOfVariables(); ++v) {
switch (m.x[v].type) {
case FLT:
x.add(IloNumVar(env, m.x[v].lowerBound, m.x[v].upperBound, IloNumVar::Float));
break;
case BIN:
x.add(IloNumVar(env, m.x[v].lowerBound, m.x[v].upperBound, IloNumVar::Bool));
break;
default:
x.add(IloNumVar(env, m.x[v].lowerBound, m.x[v].upperBound, IloNumVar::Int));
}
obj.setLinearCoef(x[v], m.c[v]);
x[v].setName(m.varDesc[v].c_str());
}
for (unsigned long c = 0; c < m.numberOfConstraints(); ++c) {
switch (m.ops[c]) {
case LESS_EQUAL:
con.add(IloRange(env, -IloInfinity, m.b[c]));
break;
case EQUAL:
con.add(IloRange(env, m.b[c], m.b[c]));
break;
case GREATER_EQUAL:
con.add(IloRange(env, m.b[c], IloInfinity));
}
for (const pair<uint32_t, double>& p : m.A[c])
con[c].setLinearCoef(x[p.first], p.second);
con[c].setName(m.conDesc[c].c_str());
}
model.add(obj);
model.add(con);
}
示例5: CreateMixingBindingConstraint
void CreateMixingBindingConstraint(IloModel model, BoolVarMatrix M, BoolVarMatrix Y,
BoolVarMatrix X, IloNumVarArray s, IloRangeArray c){
IloEnv env = model.getEnv();
//sum[i] holds summation from
//eqn-13 for operation i
IloExprArray sum1(env);
//Creating array M[p][i]
//i is for ith operation
for(int p = 0; p < M.getSize(); p++){
for(int i = 0; i < n; i++)
M[p].add(IloBoolVar(env));
}
//Ensuring operation remains bound to the same module
for(int i = 0; i < n; i++){
sum1.add(IloExpr(env));
for(int p = 0; p < n_m; p++){
sum1[i] += M[p][i];
}
c.add(sum1[i] == 1);
}
//Two operations running simulateneously
//can not be bound to the same module
for(int p = 0; p < n_m; p++){
for(int t = 0; t < T_MAX; t++){
for(int i = 0; i < n; i++){
for(int j = i+1; j < n; j++){
c.add(X[i][t] + X[j][t] + M[p][i] + M[p][j] <= 3);
}
}
}
}
return;
}
示例6: CreateSchedulingConstraint
void CreateSchedulingConstraint(IloModel model, BoolVarMatrix X, BoolVarMatrix Y,
IloNumVarArray s, IloRangeArray c){
IloEnv env = model.getEnv();
//sum[i] holds the summation
//from eqn-8 for operation i
IloExprArray sum(env);
//The for-loop encodes all
//the execution constraints
for(int i = 0; i < X.getSize(); i++){
sum.add(IloExpr(env));
for(int t = 0; t < T_MAX; t++){
X[i].add(IloBoolVar(env));
sum[i] += X[i][t];
c.add( t - s[i+1] - T_MAX*(X[i][t]-1) >= 0);
c.add(-t + s[i+1] - T_MAX*(X[i][t]-1) + T >= 1);
}
c.add(sum[i] == T);
}
//Resources Constraints
IloExprArray summation1(env);
IloExprArray summation2(env);
for(int t = 0; t < T_MAX; t++){
summation1.add(IloExpr(env));
summation2.add(IloExpr(env));
for(int i = 0; i < X.getSize(); i++){
summation1[t] += X[i][t];
}
for(int e = 0; e < Y.getSize(); e++){
summation2[t] += Y[e][t];
}
c.add(n_r*summation1[t] + summation2[t] <= n_m*n_r);
}
return;
}
示例7:
static void
populatebyrow (IloModel model, IloNumVarArray x, IloRangeArray c)
{
IloEnv env = model.getEnv();
x.add(IloNumVar(env, -1.0, 1.0));
x.add(IloNumVar(env, 0.0, 1.0));
model.add(IloMinimize(env, 0.5 * (-3*x[0]*x[0] - 3*x[1]*x[1] +
- 1*x[0]*x[1] ) ));
c.add( - x[0] + x[1] >= 0);
c.add( x[0] + x[1] >= 0);
model.add(c);
} // END populatebyrow
示例8: sosvar
static void
populatebyrow (IloModel model, IloNumVarArray x, IloRangeArray c)
{
IloEnv env = model.getEnv();
x.add(IloNumVar(env, 0.0, 40.0));
x.add(IloNumVar(env, 0.0, IloInfinity, ILOINT));
x.add(IloNumVar(env, 0.0, IloInfinity, ILOINT));
x.add(IloNumVar(env, 2.0, 3.0, ILOINT));
model.add(IloMaximize(env, x[0] + 2 * x[1] + 3 * x[2] + x[3]));
c.add( - x[0] + x[1] + x[2] + 10 * x[3] <= 20);
c.add( x[0] - 3 * x[1] + x[2] <= 30);
c.add( x[1] - 3.5* x[3] == 0);
model.add(c);
IloNumVarArray sosvar(env, 2);
IloNumArray sosval(env, 2);
sosvar[0] = x[2]; sosvar[1] = x[3];
sosval[0] = 25.0; sosval[1] = 18.0;
model.add(IloSOS1(model.getEnv(), sosvar, sosval));
} // END populatebyrow
示例9: IloMaximize
static void
populatebycolumn (IloModel model, IloNumVarArray x, IloRangeArray c)
{
IloEnv env = model.getEnv();
IloObjective obj = IloMaximize(env);
c.add(IloRange(env, -IloInfinity, 20.0));
c.add(IloRange(env, -IloInfinity, 30.0));
x.add(IloNumVar(obj(1.0) + c[0](-1.0) + c[1]( 1.0), 0.0, 40.0));
x.add(obj(2.0) + c[0]( 1.0) + c[1](-3.0));
x.add(obj(3.0) + c[0]( 1.0) + c[1]( 1.0));
model.add(obj);
model.add(c);
} // END populatebycolumn
示例10:
static void
populatebyrow (IloModel model, IloNumVarArray x, IloRangeArray c)
{
IloEnv env = model.getEnv();
x.add(IloNumVar(env, 0.0, 40.0));
x.add(IloNumVar(env));
x.add(IloNumVar(env));
model.add(IloMaximize(env, x[0] + 2 * x[1] + 3 * x[2]
- 0.5 * (33*x[0]*x[0] + 22*x[1]*x[1] +
11*x[2]*x[2] - 12*x[0]*x[1] -
23*x[1]*x[2] ) ));
c.add( - x[0] + x[1] + x[2] <= 20);
c.add( x[0] - 3 * x[1] + x[2] <= 30);
model.add(c);
} // END populatebyrow
示例11: makeCuts
ILOSTLBEGIN
void makeCuts(IloRangeArray cuts, const IloNumVarArray& vars) {
IloNumVar x11, x12, x13, x14, x15;
IloNumVar x21, x22, x23, x24, x25;
IloNumVar x31, x32, x33, x34, x35;
IloNumVar x41, x42, x43, x44, x45;
IloNumVar x51, x52, x53, x54, x55;
IloNumVar w11, w12, w13, w14, w15;
IloNumVar w21, w22, w23, w24, w25;
IloNumVar w31, w32, w33, w34, w35;
IloNumVar w41, w42, w43, w44, w45;
IloNumVar w51, w52, w53, w54, w55;
IloInt num = vars.getSize();
for (IloInt i = 0; i < num; i++) {
if ( strcmp(vars[i].getName(), "X11") == 0 ) x11 = vars[i];
else if ( strcmp(vars[i].getName(), "X12") == 0 ) x12 = vars[i];
else if ( strcmp(vars[i].getName(), "X13") == 0 ) x13 = vars[i];
else if ( strcmp(vars[i].getName(), "X14") == 0 ) x14 = vars[i];
else if ( strcmp(vars[i].getName(), "X15") == 0 ) x15 = vars[i];
else if ( strcmp(vars[i].getName(), "X21") == 0 ) x21 = vars[i];
else if ( strcmp(vars[i].getName(), "X22") == 0 ) x22 = vars[i];
else if ( strcmp(vars[i].getName(), "X23") == 0 ) x23 = vars[i];
else if ( strcmp(vars[i].getName(), "X24") == 0 ) x24 = vars[i];
else if ( strcmp(vars[i].getName(), "X25") == 0 ) x25 = vars[i];
else if ( strcmp(vars[i].getName(), "X31") == 0 ) x31 = vars[i];
else if ( strcmp(vars[i].getName(), "X32") == 0 ) x32 = vars[i];
else if ( strcmp(vars[i].getName(), "X33") == 0 ) x33 = vars[i];
else if ( strcmp(vars[i].getName(), "X34") == 0 ) x34 = vars[i];
else if ( strcmp(vars[i].getName(), "X35") == 0 ) x35 = vars[i];
else if ( strcmp(vars[i].getName(), "X41") == 0 ) x41 = vars[i];
else if ( strcmp(vars[i].getName(), "X42") == 0 ) x42 = vars[i];
else if ( strcmp(vars[i].getName(), "X43") == 0 ) x43 = vars[i];
else if ( strcmp(vars[i].getName(), "X44") == 0 ) x44 = vars[i];
else if ( strcmp(vars[i].getName(), "X45") == 0 ) x45 = vars[i];
else if ( strcmp(vars[i].getName(), "X51") == 0 ) x51 = vars[i];
else if ( strcmp(vars[i].getName(), "X52") == 0 ) x52 = vars[i];
else if ( strcmp(vars[i].getName(), "X53") == 0 ) x53 = vars[i];
else if ( strcmp(vars[i].getName(), "X54") == 0 ) x54 = vars[i];
else if ( strcmp(vars[i].getName(), "X55") == 0 ) x55 = vars[i];
else if ( strcmp(vars[i].getName(), "W11") == 0 ) w11 = vars[i];
else if ( strcmp(vars[i].getName(), "W12") == 0 ) w12 = vars[i];
else if ( strcmp(vars[i].getName(), "W13") == 0 ) w13 = vars[i];
else if ( strcmp(vars[i].getName(), "W14") == 0 ) w14 = vars[i];
else if ( strcmp(vars[i].getName(), "W15") == 0 ) w15 = vars[i];
else if ( strcmp(vars[i].getName(), "W21") == 0 ) w21 = vars[i];
else if ( strcmp(vars[i].getName(), "W22") == 0 ) w22 = vars[i];
else if ( strcmp(vars[i].getName(), "W23") == 0 ) w23 = vars[i];
else if ( strcmp(vars[i].getName(), "W24") == 0 ) w24 = vars[i];
else if ( strcmp(vars[i].getName(), "W25") == 0 ) w25 = vars[i];
else if ( strcmp(vars[i].getName(), "W31") == 0 ) w31 = vars[i];
else if ( strcmp(vars[i].getName(), "W32") == 0 ) w32 = vars[i];
else if ( strcmp(vars[i].getName(), "W33") == 0 ) w33 = vars[i];
else if ( strcmp(vars[i].getName(), "W34") == 0 ) w34 = vars[i];
else if ( strcmp(vars[i].getName(), "W35") == 0 ) w35 = vars[i];
else if ( strcmp(vars[i].getName(), "W41") == 0 ) w41 = vars[i];
else if ( strcmp(vars[i].getName(), "W42") == 0 ) w42 = vars[i];
else if ( strcmp(vars[i].getName(), "W43") == 0 ) w43 = vars[i];
else if ( strcmp(vars[i].getName(), "W44") == 0 ) w44 = vars[i];
else if ( strcmp(vars[i].getName(), "W45") == 0 ) w45 = vars[i];
else if ( strcmp(vars[i].getName(), "W51") == 0 ) w51 = vars[i];
else if ( strcmp(vars[i].getName(), "W52") == 0 ) w52 = vars[i];
else if ( strcmp(vars[i].getName(), "W53") == 0 ) w53 = vars[i];
else if ( strcmp(vars[i].getName(), "W54") == 0 ) w54 = vars[i];
else if ( strcmp(vars[i].getName(), "W55") == 0 ) w55 = vars[i];
}
cuts.add(x21 - x22 <= 0);
cuts[0].setName("cut0");
cuts.add(x22 - x23 <= 0);
cuts.add(x23 - x24 <= 0);
cuts.add(2.08*x11 + 2.98*x21 + 3.47*x31 + 2.24*x41 + 2.08*x51 + 0.25*w11 +
0.25*w21 + 0.25*w31 + 0.25*w41 + 0.25*w51 <= 20.25);
cuts.add(2.08*x12 + 2.98*x22 + 3.47*x32 + 2.24*x42 + 2.08*x52 + 0.25*w12 +
0.25*w22 + 0.25*w32 + 0.25*w42 + 0.25*w52 <= 20.25);
cuts.add(2.08*x13 + 2.98*x23 + 3.4722*x33 + 2.24*x43 + 2.08*x53 + 0.25*w13
+ 0.25*w23 + 0.25*w33 + 0.25*w43 + 0.25*w53 <= 20.25);
cuts.add(2.08*x14 + 2.98*x24 + 3.47*x34 + 2.24*x44 + 2.08*x54 + 0.25*w14 +
0.25*w24 + 0.25*w34 + 0.25*w44 + 0.25*w54 <= 20.25);
cuts.add(2.08*x15 + 2.98*x25 + 3.47*x35 + 2.24*x45 + 2.08*x55 + 0.25*w15 +
0.25*w25 + 0.25*w35 + 0.25*w45 + 0.25*w55 <= 16.25);
}
示例12: IloMinimize
// This function creates the following model:
// Minimize
// obj: x1 + x2 + x3 + x4 + x5 + x6
// Subject To
// c1: x1 + x2 + x5 = 8
// c2: x3 + x5 + x6 = 10
// q1: [ -x1^2 + x2^2 + x3^2 ] <= 0
// q2: [ -x4^2 + x5^2 ] <= 0
// Bounds
// x2 Free
// x3 Free
// x5 Free
// End
// which is a second order cone program in standard form.
// The function returns objective, variables and constraints in the
// values obj, vars and rngs.
// The function also sets up cone so that for a column j we have
// cone[j] >= 0 Column j is in a cone constraint and is the
// cone's head variable.
// cone[j] == NOT_CONE_HEAD Column j is in a cone constraint but is
// not the cone's head variable..
// cone[j] == NOT_IN_CONE Column j is not contained in any cone constraint.
static void
createmodel (IloModel& model, IloObjective &obj, IloNumVarArray &vars,
IloRangeArray &rngs, IloIntArray& cone)
{
// The indices we assign as user objects to the modeling objects.
// We define them as static data so that we don't have to worry about
// dynamic memory allocation/leakage.
static int indices[] = { 0, 1, 2, 3, 4, 5, 6 };
IloEnv env = model.getEnv();
// Create variables.
IloNumVar x1(env, 0, IloInfinity, "x1");
IloNumVar x2(env, -IloInfinity, IloInfinity, "x2");
IloNumVar x3(env, -IloInfinity, IloInfinity, "x3");
IloNumVar x4(env, 0, IloInfinity, "x4");
IloNumVar x5(env, -IloInfinity, IloInfinity, "x5");
IloNumVar x6(env, 0, IloInfinity, "x6");
// Create objective function and immediately store it in return value.
obj = IloMinimize(env, x1 + x2 + x3 + x4 + x5 + x6);
// Create constraints.
IloRange c1(env, 8, x1 + x2 + x5, 8, "c1");
IloRange c2(env, 10, x3 + x5 + x6, 10, "c2");
IloRange q1(env, -IloInfinity, -x1*x1 + x2*x2 + x3*x3, 0, "q1");
cone.add(2); // x1, cone head of constraint at index 2
cone.add(NOT_CONE_HEAD); // x2
cone.add(NOT_CONE_HEAD); // x3
IloRange q2(env, -IloInfinity, -x4*x4 + x5*x5, 0, "q2");
cone.add(3); // x4, cone head of constraint at index 3
cone.add(NOT_CONE_HEAD); // x5
cone.add(NOT_IN_CONE); // x6
// Setup model.
model.add(obj);
model.add(obj);
model.add(c1);
model.add(c2);
model.add(q1);
model.add(q2);
// Setup return values.
vars.add(x1);
vars.add(x2);
vars.add(x3);
vars.add(x4);
vars.add(x5);
vars.add(x6);
rngs.add(c1);
rngs.add(c2);
rngs.add(q1);
rngs.add(q2);
// We set the user object for each modeling object to its index in the
// respective array. This makes the code in checkkkt a little simpler.
for (IloInt i = 0; i < vars.getSize(); ++i)
vars[i].setObject(&indices[i]);
for (IloInt i = 0; i < rngs.getSize(); ++i)
rngs[i].setObject(&indices[i]);
}
示例13: obj
Example(IloEnv env)
: nblocks(0), model(env), vars(env), ranges(env)
{
// Model data.
// fixed[] is the fixed cost for opening a facility,
// cost[i,j] is the cost for serving customer i from facility j.
static double const fixed[] = { 2.0, 3.0, 3.0 };
static double const cost[] = { 2.0, 3.0, 4.0, 5.0, 7.0,
4.0, 3.0, 1.0, 2.0, 6.0,
5.0, 4.0, 2.0, 1.0, 3.0 };
#define NFACTORY ((CPXDIM)(sizeof(fixed) / sizeof(fixed[0])))
#define NCUSTOMER ((CPXDIM)((sizeof(cost) / sizeof(cost[0])) / NFACTORY))
nblocks = NCUSTOMER;
IloExpr obj(env);
// Create integer y variables.
IloNumVarArray y(env);
for (IloInt f = 0; f < NFACTORY; ++f) {
std::stringstream s;
s << "y" << f;
IloIntVar v(env, 0, 1, s.str().c_str());
obj += fixed[f] * v;
objMap[v] = fixed[f];
y.add(v);
blockMap.insert(BlockMap::value_type(v, -1));
intersectMap.insert(IntersectMap::value_type(v, RowSet()));
}
// Create continuous x variables.
IloNumVarArray x(env);
for (IloInt f = 0; f < NFACTORY; ++f) {
for (IloInt c = 0; c < NCUSTOMER; ++c) {
std::stringstream s;
s << "x" << f << "#" << c;
IloNumVar v(env, 0.0, IloInfinity, s.str().c_str());
obj += v * cost[f * NCUSTOMER + c];
objMap[v] = cost[f * NCUSTOMER + c];
x.add(v);
blockMap.insert(BlockMap::value_type(v, c));
intersectMap.insert(IntersectMap::value_type(v, RowSet()));
}
}
vars.add(y);
vars.add(x);
model.add(vars);
// Add objective function.
model.add(IloMinimize(env, obj, "obj"));
objSense = IloObjective::Minimize;
obj.end();
// Satisfy each customer's demand.
for (IloInt c = 0; c < NCUSTOMER; ++c) {
std::stringstream s;
s << "c1_" << c;
IloRange r(env, 1.0, IloInfinity, s.str().c_str());
IloExpr lhs(env);
for (IloInt f = 0; f < NFACTORY; ++f) {
lhs += x[f * NCUSTOMER + c];
intersectMap[x[f * NCUSTOMER + c]].insert(r);
}
r.setExpr(lhs);
ranges.add(r);
lhs.end();
}
// A factory must be open if we service from it.
for (IloInt c = 0; c < NCUSTOMER; ++c) {
for (IloInt f = 0; f < NFACTORY; ++f) {
std::stringstream s;
s << "c2_" << c << "#" << f;
IloRange r(env, 0.0, IloInfinity, s.str().c_str());
intersectMap[x[f * NCUSTOMER + c]].insert(r);
intersectMap[y[f]].insert(r);
r.setExpr(-x[f * NCUSTOMER + c] + y[f]);
ranges.add(r);
}
}
// Capacity constraint.
IloRange r(env, -IloInfinity, NFACTORY - 1, "c3");
IloExpr lhs(env);
for (IloInt f = 0; f < NFACTORY; ++f) {
lhs += y[f];
intersectMap[y[f]].insert(r);
}
r.setExpr(lhs);
ranges.add(r);
lhs.end();
model.add(ranges);
#undef NFACTORY
#undef NCUSTOMER
}
示例14: populatebyrow
void LpSolver::populatebyrow (CplexConverter& cplexConverter,
IloModel model, IloNumVarArray x, IloRangeArray c)
{
IloEnv env = model.getEnv();
// CAPITAL LETTERS MEAN I NEED YOUR HELP, here is help
// IloExpr cost(env);
// Create Variables
// cout << "size of var: " << cplexConverter.variables.size() << endl;
for (int i = 0; i < cplexConverter.variables.size(); ++i){
IloNumVar iloVar(env, 0.0, cplexConverter.capacities[i], IloNumVar::Int);
// cout << iloVar << endl;
x.add(iloVar);
}
//Capacity Constraints
for (auto &it : cplexConverter.atomicIdToVarIdDict){
IloExpr t(env);
// cout << "adding constraint ";
for (int j = 0; j < it.second.size(); j++){
// cout << "x[" << it.second[j] << "] + ";
t += x[it.second[j]];
}
// cout << endl;
c.add(t <= cplexConverter.graph->atomicEdges[it.first]->capacity);
// cout << c << endl;
t.end();
}
// other constraints
for (auto nodePair : cplexConverter.graph->nodes){
// For all nodes
Node* n = nodePair.second;
if(n == cplexConverter.src){
// source constraints
// IloExpr inFlow(env);
IloExpr outFlow(env);
for(auto &atoIn : n->atomicEdge_in){
int aeId = atoIn.second->atomicEdgeId;
for (int j = 0; j < cplexConverter.atomicIdToVarIdDict[aeId].size(); j++){
// var Id
int vId = cplexConverter.atomicIdToVarIdDict[aeId][j];
outFlow += x[vId];
// cost += cplexConverter.graph->atomicEdges[cplexConverter.variables[vId].atomicEdgeId]->interest_rate * x[vId];
}
}
for (auto &atoOut : n->atomicEdge_out){
int aeId = atoOut.second->atomicEdgeId;
for (int j = 0; j < cplexConverter.atomicIdToVarIdDict[aeId].size(); j++){
// var Id
int vId = cplexConverter.atomicIdToVarIdDict[aeId][j];
// inFlow += x[vId];
c.add(x[vId] == 0);
// cost -= cplexConverter.graph->atomicEdges[cplexConverter.variables[vId].atomicEdgeId]->interest_rate * x[vId];
}
}
c.add(outFlow == cplexConverter.request);
// inFlow.end();
outFlow.end();
} else if(n == cplexConverter.dest){
// destination constraints
IloExpr inFlow(env);
// IloExpr outFlow(env);
for(auto &atoIn : n->atomicEdge_in){
int aeId = atoIn.second->atomicEdgeId;
for (int j = 0; j < cplexConverter.atomicIdToVarIdDict[aeId].size(); j++){
// var Id
int vId = cplexConverter.atomicIdToVarIdDict[aeId][j];
// outFlow += x[vId];
c.add(x[vId] == 0);
}
}
for (auto &atoOut : n->atomicEdge_out){
int aeId = atoOut.second->atomicEdgeId;
for (int j = 0; j < cplexConverter.atomicIdToVarIdDict[aeId].size(); j++){
// var Id
int vId = cplexConverter.atomicIdToVarIdDict[aeId][j];
inFlow += x[vId];
}
}
c.add(inFlow == cplexConverter.request);
inFlow.end();
// outFlow.end();
} else {
// Monotonicity Constraints
for (int i = 0; i < credNetConstants.totalIrs.size(); ++i){
IloExpr tempin(env);
IloExpr tempout(env);
for (auto &atoIn : n->atomicEdge_in){
//.........这里部分代码省略.........
示例15: populatebyrow
static void populatebyrow (IloModel model, IloNumVarArray x, IloRangeArray c) {
IloEnv env = model.getEnv();
IloNumArray costs(env);
IloNumArray time(env);
IloNumArray product(env);
int costs_array[] = {1,1,1,10,1,12,2,2,5,10};
int time_array[] = {10,1,7,3,2,3,2,3,7,1};
int product_array[] = {0,3,1,2,-2,0,0,0,0,0};
for(int i=0;i<10;i++)
costs.add(costs_array[i]);
for(int i=0;i<10;i++)
time.add(time_array[i]);
for(int i=0;i<10;i++)
product.add(product_array[i]);
x.add(IloBoolVar(env,"x12")); //0
x.add(IloBoolVar(env,"x24")); //1
x.add(IloBoolVar(env,"x46")); //2
x.add(IloBoolVar(env,"x13")); //3
x.add(IloBoolVar(env,"x32")); //4
x.add(IloBoolVar(env,"x35")); //5
x.add(IloBoolVar(env,"x56")); //6
x.add(IloBoolVar(env,"x25")); //7
x.add(IloBoolVar(env,"x34")); //8
x.add(IloBoolVar(env,"x45")); //9
x.add(IloNumVar(env,0,IloInfinity,ILOINT,"s2")); //10
x.add(IloNumVar(env,0,IloInfinity,ILOINT,"s3")); //11
x.add(IloNumVar(env,0,IloInfinity,ILOINT,"s4")); //12
x.add(IloNumVar(env,0,IloInfinity,ILOINT,"s5")); //13
x.add(IloNumVar(env,0,IloInfinity,ILOINT,"s1")); //14
x.add(IloNumVar(env,0,IloInfinity,ILOINT,"s6")); //15
x.add(IloNumVar(env,0,IloInfinity,ILOINT,"q2")); //16
x.add(IloNumVar(env,0,IloInfinity,ILOINT,"q3")); //17
x.add(IloNumVar(env,0,IloInfinity,ILOINT,"q4")); //18
x.add(IloNumVar(env,0,IloInfinity,ILOINT,"q5")); //19
x.add(IloNumVar(env,0,IloInfinity,ILOINT,"q1")); //20
x.add(IloNumVar(env,0,IloInfinity,ILOINT,"q6")); //21
model.add(IloMinimize(env, costs[0]*x[0] + costs[1]*x[1] + costs[2]*x[2] + costs[3]*x[3] + costs[4]*x[4] + costs[5]*x[5] + costs[6]*x[6] + costs[7]*x[7] + costs[8]*x[8] + costs[9]*x[9]));
c.add(x[0]+ x[3] == 1); // arcs sortant du noeud de depart
c.add(x[2]+ x[6] == 1); // arcs entrant au noeud d arrivee
c.add(x[1]+ x[7] - x[0] - x[4] == 0);
c.add(x[8]+ x[5] + x[4] - x[3] == 0);
c.add(x[9]+ x[2] - x[1] - x[8] == 0);
c.add(x[6]- x[7] - x[5] - x[9] == 0);
c.add(time[0]*x[0] + time[1]*x[1] + time[2]*x[2] + time[3]*x[3] + time[4]*x[4] + time[5]*x[5] + time[6]*x[6] + time[7]*x[7] + time[8]*x[8] + time[9]*x[9] <= 14);
//c.add(product[0]*x[0] + product[1]*x[1] + product[2]*x[2] + product[3]*x[3] + product[4]*x[4] + product[5]*x[5] + product[6]*x[6] + product[7]*x[7] + product[8]*x[8] + product[9]*x[9] <= 4);
c.add(x[14]+time[0]-1000*(1-x[0]) - x[10]<= 0);
c.add(x[20]+product[0]-1000*(1-x[0]) - x[16]<= 0);
c.add(x[10]+time[1]-1000*(1-x[1]) - x[12]<= 0);
c.add(x[16]+product[1]-1000*(1-x[1]) - x[18]<= 0);
c.add(x[18]-product[1]-1000*(1-x[1]) - x[16]<= 0);
c.add(x[12]+time[2]-1000*(1-x[2]) - x[15]<= 0);
c.add(x[18]+product[2]-1000*(1-x[2]) - x[21]<= 0);
c.add(x[21]-product[2]-1000*(1-x[2]) - x[18]<= 0);
c.add(x[14]+time[3]-1000*(1-x[3]) - x[11]<= 0);
c.add(x[20]+product[3]-1000*(1-x[3]) - x[17]<= 0);
c.add(x[17]-product[3]-1000*(1-x[3]) - x[20]<= 0);
c.add(x[13]+time[6]-1000*(1-x[6]) - x[15]<= 0);
c.add(x[19]+product[6]-1000*(1-x[6]) - x[21]<= 0);
c.add(x[10]+time[7]-1000*(1-x[7]) - x[13]<= 0);
c.add(x[16]+product[7]-1000*(1-x[7]) - x[19]<= 0);
c.add(x[12]+time[9]-1000*(1-x[9]) - x[13]<= 0);
c.add(x[18]+product[9]-1000*(1-x[9]) - x[19]<= 0);
c.add(x[11]+time[4]-1000*(1-x[4]) - x[10] <=0);
c.add(x[17]+product[4]-1000*(1-x[4]) - x[16]<= 0);
c.add(x[16]-product[4]-1000*(1-x[4]) - x[17]<= 0);
c.add(x[11]+time[8]-1000*(1-x[8]) - x[12]<= 0);
c.add(x[17]+product[8]-1000*(1-x[8]) - x[18]<= 0);
c.add(x[11]+time[5]-1000*(1-x[5]) - x[13]<= 0);
c.add(x[17]+product[5]-1000*(1-x[5]) - x[19]<= 0);
//.........这里部分代码省略.........