#import "OptiMax.tlb"
using namespace MPLLib;
void SolveModelTypeLib(void)
{
char *ModelFilename = "c:\\mplwin4\\planning.mpl";
CoInitialize(NULL);
try {
IOptiMaxPtr pMpl( __uuidof(MPLLib::OptiMax));
ISolverPtr pSolver;
IModelPtr pModel;
IMatrixPtr pMatrix;
IVariablesPtr pVars;
IConstraintsPtr pCons;
ISolutionPtr pSol;
IVariableVectorPtr pVarVector;
IVariablePtr pVar;
long result;
pSolver = pMpl->Solvers->Add("c:\\mplwin4\\CPLEX65.dll"); // Set pSolver = MPL.Solvers.Add "CPLEX65.DLL"
pModel = pMpl->Models->Add("Model1"); // Set pModel = MPL.Models.Add("Model1")
printf("READ: '%s'\n", ModelFilename);
result = pModel->ReadModel(ModelFilename); // Set result = pModel.ReadModel("planning.mpl")
if (result) {
printf("ReadModel(%s) failed (result=%d\n\n", ModelFilename, result);
return;
}
pMatrix = pModel->Matrix; // Set pMatrix = pModel.Matrix
pVars = pMatrix->Variables; // Set pVars = pMatrix.Variables
pCons = pMatrix->Constraints; // Set pCons = pMatrix.Constraints
printf("MODEL: vars=%d, cons=%d, nz=%d, int=%d\n",
pVars->Count, pCons->Count, pMatrix->NonZeroCount, pVars->IntegerCount);
result = pModel->Solve(pSolver); // Set result = pModel.Solve(pSolver)
if (result) {
printf("Solve() failed (result=%d\n\n", result);
return;
}
pSol = pModel->Solution; // Set pSol = pModel.Solution
printf("SOLVE: obj=%.10lg, iter=%d, nodes=%d, result='%s'\n",
pSol->ObjectValue, pSol->IterationCount,
pSol->NodeCount, (LPCSTR)pSol->ResultString);
pVarVector = pModel->VariableVectors->GetItem("Produce"); // pVarVector = pModel.VariableVectors("Production")
int i = 0;
printf("PROD: ");
pVar = pVarVector->MoveFirstPos();
while (pVarVector->PosValid) {
i++;
printf(" [%d]=%.10lg,", i, pVar->Activity); // pVar.Activity
pVar = pVarVector->MoveNextPos();
}
printf("\n\n");
}
catch (const _com_error& Err) {
printf("Error: %s (0x%x)\n\n%s\n",
(LPCSTR)Err.ErrorMessage(), Err.Error(), (LPCSTR)Err.Description());
}
CoUninitialize();
}