Dec 19, 2012 at 12:52pm UTC
I have C++ codes for 0/1 knapsack problem. How can I transform it into ILOG CPLEX environment?
#include <iostream>
#include <fstream>
#include <iomanip>
#include <cmath>
#include <vector>
using namespace std;
const int lag=1000;
int ebo(int,int);
int maximum(int,int);
int value[lag],
weight[lag],
v[lag][lag],
x[lag];
int i,
j,
m,
n;
int ebo(int i,int j)
{
int val;
if(v[i][j]==-1)
{
if(j<weight[i])
val=ebo(i-1, j);
else val=maximum(ebo(i-1, j),(ebo(i-1, j-weight[i])+value[i]));
v[i][j]=val;
}
return v[i][j];
}
void esra()
{
int k;
k=m;
cout<<"The cuts are as follows: \n\n";
for(int i=n; i>=0; i--)
{
if(v[i][k]!=v[i-1][k])
{
x[i]=1;
if(v[i][k]==0) break;
else
cout<<setw(10)<<"At stage "<<i<<": "<<"f["<<k<<"]"<<" = "<<v[i][k]<<": => ";
for(int p=1; p<=i; p++)
{
cout<<value[p]<<"x["<<p<<"]";
if(p==i) break;
else
cout<<" + ";
}
cout<<" <= "<<v[i][k]<<endl;
cout<<"\n"<<endl;
k=k-weight[i];
}
}
for(int i=1; i<=n; i++)
{
cout<<"The optimal solution: ";
for(i=1; i<=n; i++)
cout<<"\n x["<<i<<"] = "<<x[i]<<"\n"<<" ";
}
}
int maximum(int a, int b)
{
return (a>b)?a:b;
}
int main()
{
int f,
W;
cout<<"Please enter no. of items:\n";
cin>>n;
cout<<" \n"<<endl;
cout<<"Uncorrelated data instance for the 0-1 KP:\n"<<endl;
cout<<"weights"<<setw(9)<<"values"<<endl;
cout<<"________________"<<endl;
srand(time(0));
for(int i=1; i<=n; i++)
{
weight[i] = rand() % 10 + 1; // 1<=w<=10
value[i] = rand() % 10 + 1; // 1<=v<=10
cout<<setw(4)<<weight[i]<<setw(10)<<value[i]<<endl;
}
cout<<"\n"<<endl;
cout<<"Generate total weight capacity of knapsack:\n";
int total = 0 ;
for(int i = 0; i<=n; i++)
{
total = total + weight[i];
}
m = total/2;
cout<<"W = "<<m<<endl;
cout<<"\n"<<endl;
for(int i=0; i<=m; i++)
v[0][i]=0;
for(int i=0; i<=n; i++)
v[i][0]=0;
for(int i=1; i<=n; i++)
for(int j=1; j<=m; j++)
v[i][j]=-1;
f=ebo(n, m);
cout<<"The optimal value is f = "<<f<<endl;
cout<<" "<<endl;
for(int i=1; i<=n; i++)
x[i]=0;
esra();
system("pause");
return 0;
}