#include ILOSTLBEGIN IloInt TimeLimit; IloInt MoveLimit; const IloInt MaxSize = 400; IloNum PenaltyFactor; IloInt TabuTenure; IloBool TypeOfMethod;//0-LS,1-GLS; IloInt nbOfVisits, nbOfTrucks, nbOfJobs; IloNum* durations; IloInt* resourceNumbers; IloNum** DistanceMatrix; class MyDistanceI: public IloDistanceI { //private: public: MyDistanceI(IloEnv env); virtual IloNum computeDistance (IloNode node1, IloNode node2, IloVehicle vehicle) const; IloEnv _env; // IloNum** _distanceMatrix; void getDistanceMatrix(IloNum**& DistanceMatrix, IloNum*& durations, IloInt nbOfTrucks, IloInt nbOfJobs); }; MyDistanceI::MyDistanceI(IloEnv env) : IloDistanceI(env) { _env = env; } void MyDistanceI::getDistanceMatrix(IloNum**& _distanceMatrix, IloNum*& durations, IloInt nbOfTrucks, IloInt nbOfJobs) { /* IloInt size = nbOfVisits+1; //cout<<"size = "<getDistanceMatrix(dist->_distanceMatrix,durations,nbOfTrucks,nbOfJobs); // return 20; IloInt index1 = 0, index2 = 0; char buffer1[28], buffer2[28], buffer[28]; // cout<.exe \n"; env.out() <<" TypeOfMethod <0-LS,1-GLS>\n"; env.out() <<" Strategy <1-first accept, 0 - best accept>\n"; env.out() <<" Penalty \n"; env.out() <<" MoveLimitValue \n"; env.out() <<" Deadline DeadlineStep \n"; return 0; } infile.open(problem); outfile.open(output, ios::out); if (!infile) { env.out() << "File not found or not specified: " << problem << endl; env.end(); return 0; } if (!outfile) { env.out() << "Cannot open file for output: " << output << endl; env.end(); return 0; } infile>>nbOfJobs; infile>>nbOfTrucks; nbOfVisits = nbOfJobs*nbOfTrucks; // IloInt* resourceNumbers; resourceNumbers = new IloInt[MaxSize]; // IloNum* durations; durations = new IloNum[MaxSize]; for (int i=0;i>resourceNumbers[index]; infile>>durations[index]; index++; } } outfile<= openTime); mdl.add(first.getTransitVar(tardiness) == 0); IloVisit last(depot, "Depot"); IloNumVar tard(env,0,IloInfinity,ILOINT); mdl.add(tard >= last.getCumulVar(time) - closeTime); mdl.add(last.getTransitVar(tardiness) == tard); char name[16]; sprintf(name, "Vehicle %d", j); IloVehicle vehicle(first, last, name); vehicles[j]=vehicle; vehicle.setCost(tardiness, 1.0); vehicle.setCost(length,0.001); mdl.add(vehicle); } char buffer[28]; //creating customer visits for (i = 0; i < nbOfTrucks*nbOfJobs; i++) { IloInt id=i+1; //coordinates of customers (all zero) IloNum x=0, y=0; sprintf(buffer,"%d",i+1); IloNode customer(env, x, y, 0, buffer); char name[16]; sprintf(name, "%d", id); IloVisit visit(customer, name); if (noTransformation) { mdl.add(visit.getDelayVar(time) == durations[i]); } else { mdl.add(visit.getDelayVar(time) == 0); } mdl.add(visit.getTransitVar(tardiness) == 0); mdl.add(visit.getCumulVar(time) >= openTime); mdl.add(visit.getCumulVar(time) <= closeTime); visits[i] = visit; mdl.add(visit); } //Imposing vehicle-visit constraints (from job shop //we know all vehicle assignments for (i=0;i quit if (!solver.solve(goal)) { solver.out() << "Couldn't generate first solution! Try and change your deadline value"; return 0; } //outputting the first solution outfile<<"Deadline: "<=1.0) { // cout<<"point0"<