#include "stdafx.h"
#include <iostream>
#include <ilsolver/ilosolverint.h>
ILOSTLBEGIN
using namespace std;
const char* Suppliers[] = {"Bonn", "Bordeaux", "London", "Paris", "Rome"};
int main(int argc, char** argv){
IloEnv env;
try {
IloModel model(env);
IloInt i, j;
const char* fileName;
if ( argc != 2 ) {
env.warning() << "usage: " << argv[0] << " <filename>" << endl;
env.warning() << "Using default file" << endl;
fileName = "C:\ILOG\Solver67\examples\data\store_ex3.dat";
} else
fileName = argv[1];
ifstream file(fileName);
// if ( !file )
// throw FileError();
// model data
IloInt buildingCost;
IloIntArray2 costMatrix(env);
IloIntArray capacity(env);
file >> buildingCost >> costMatrix >> capacity;
IloInt nStores = costMatrix.getSize();
IloInt nSuppliers = capacity.getSize();
env.out() << "Cost to build a warehouse: " << endl;
env.out() << buildingCost << endl;
env.out() << "Relative costs for stores: " << endl;
env.out() << costMatrix << endl;
env.out() << "Warehouse capacities: " << endl;
env.out() << capacity << endl;
// build model
IloIntVarArray supplier(env, nStores, 0, nSuppliers-1);
IloIntVarArray cost(env, nStores, 0, 99999);
IloIntVarArray open(env, nSuppliers, 0,1);
for (i = 0; i < nStores; i++){
[In these two lines I am getting error 2064]model.add(cost[i] == costMatrix[i](supplier[i]));
model.add(open(supplier[i])==1 );
}
for (j = 0; j < nSuppliers; j++ ) {
IloIntVarArray temp(env, nStores, 0, 1);
for (IloInt k = 0; k < nStores; k++)
model.add(temp[k] == (supplier[k] == j));
model.add(IloSum(temp) <= capacity[j]);
}
IloIntVar totalCost(env, 0, 999999);
model.add(totalCost == IloSum(cost) + IloSum(open) * buildingCost);
IloGoal combinedGoal = IloGenerate(env, cost, IloChooseMaxRegretMin) &&
IloGenerate(env, supplier) &&
IloInstantiate(env, totalCost);
IloNodeEvaluator SBSNodeEvaluator = IloSBSEvaluator(env, 4);
IloGoal SBSNodeEvaluatorGoal = IloApply(env, combinedGoal,
SBSNodeEvaluator);
IloSearchSelector minimizeSearchSelector = IloMinimizeVar(env,
totalCost,
0.1);
IloGoal finalGoal = IloSelectSearch(env, SBSNodeEvaluatorGoal,
minimizeSearchSelector);
// solve model
IloSolver solver(model);
if (solver.solve(finalGoal))
{
solver.out() << "------------------------------" << endl;
solver.out() << "Solution: " << endl;
for (i = 0; i < nStores; i ++)
solver.out() << "Store " << i << " " << "Warehouse: "
<< Suppliers[(IloInt)solver.getValue(supplier[i])]
<< " " << endl;
solver.out() << endl;
for (j = 0; j < nStores ; j ++)
solver.out() << "Store " << j << " " << "Cost: "
<< solver.getValue(cost[j]) << " " << endl;
solver.out() << endl;
solver.out() << "Total cost: " << solver.getValue(totalCost)
<< endl;
solver.out() << "------------------------------" << endl;
}
else solver.out() << "No solution" << endl;
solver.printInformation();
}
catch (IloException& ex) {
cout << "Error: " << ex << endl;
}
env.end();
return 0;
}
charlie4oct 0 Newbie Poster
charlie4oct 0 Newbie Poster
Be a part of the DaniWeb community
We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.