Python Example:
from mplpy import *
class MplCutStock(object):
def __init__(self):
self._totalCost = 0.0
self._resultString = ""
self._solution = "No solution yet"
def _loadModel(self, model, cutNames, patternNames, priceSheet, sheetsAvail, cutDemand, cutsInPattern):
try:
model.IndexSets.AddNameSet("cuts", cutNames)
model.IndexSets.AddNameSet("patterns", patternNames)
model.DataConstants.Add("PriceSheet", priceSheet)
model.DataConstants.Add("SheetsAvail", sheetsAvail)
model.DataVectors.AddDense("CutDemand[cuts]", cutDemand)
model.DataVectors.Add("CutsInPattern[patterns, cuts]", cutsInPattern)
model.PlainVariables.Add("SheetsCut", "-> T1")
model.PlainVariables.Add("TotalCost", "-> TC")
model.VariableVectors.Add("PatternCount[patterns]", "-> \"\"")
model.VariableVectors.Add("ExcessCuts[cuts]", "-> X")
model.Objectives.Add("TotalCost", ObjectSense.Minimize)
model.PlainConstraints.Add("TotCost", "TotalCost = PriceSheet*SheetsCut")
model.PlainConstraints.Add("RawAvail", "SheetsCut < SheetsAvail")
model.PlainConstraints.Add("Sheets", "SheetsCut = SUM(patterns: PatternCount[patterns])")
model.ConstraintVectors.Add("CutReq[cuts]",
"SUM(patterns: CutsInPattern[patterns, cuts] * PatternCount[patterns]) = CutDemand[cuts] + ExcessCuts[cuts]")
except Exception as ex:
print(str(ex))
result = model.LastResult
return result
def SolveModel(self, solverName, cutNames, patternNames, priceSheet, sheetsAvail, cutDemand, cutsInPattern):
solver = mpl.Solvers.Add(solverName)
if solver == None:
self._resultString = "Solver " + solverName + " + was not found."
return False
model = mpl.model
model.UseExceptions = True
model.ClearModel()
model.Name = "CutStock"
result = self._loadModel(model, cutNames, patternNames, priceSheet, sheetsAvail, cutDemand, cutsInPattern)
if not result == ResultType.Success:
if result == ResultType.AddFailed:
self._resultString = model.ResultString
else:
self._resultString = str(model.Error)
model.ClearModel()
return False
try:
model.Solve(solver)
except Exception as ex:
print(str(ex))
result = model.LastResult
if not result == ResultType.Success:
self._resultString = "Solver " + solver.Name + ": " + model.ResultString + "\n" + model.Solution.ResultString
model.ClearModel()
return False
self._resultString = model.Solution.ResultString
self._totalCost = model.Solution.ObjectValue
self._solution = str(model.Solution)
model.ClearModel()
return True
@property
def ResultString(self):
return self._resultString
@property
def TotalCost(self):
return self._totalCost
@property
def Solution(self):
return self._solution
@property
def DataDir(self):
return mpl.ModelDirectory