Python Example:
from mplpy import * class MplPortfolio(object): def __init__(self): self._investAmounts = [] self._investNames = [] self._riskVariance = 0.0 self._resultString = "" @property def InvestAmounts(self): return self._investAmounts @property def InvestNames(self): return self._investNames @property def RiskVariance(self): return self._riskVariance @property def ResultString(self): return self._resultString @property def DataDir(self): return mpl.HomeDirectory def _loadModel(self, mod, targetReturn, monthNames, stockNames, stockPrices): maxInvest = 1 minInvest = 0 maxStock = 10 minStock = 5 mpl.Options["ModelType"].ValueStr = "Quadratic"; modelFileName = mpl.HomeDirectory + "Portfolio.mpl" try: mod.IndexSets.Add("stock", stockNames) mod.IndexSets.Add("stock2", stockNames) mod.IndexSets.Add("month", monthNames) mod.IndexSets.Add("period[month]", "month - (First(month))"); mod.DataConstants.Add("MaxInvest", maxInvest) mod.DataConstants.Add("MinInvest", minInvest) mod.DataConstants.Add("MaxStocks", maxStock) mod.DataConstants.Add("MinStocks", minStock) mod.DataConstants.Add("TargetReturn", targetReturn) mod.DataVectors.Add("Price[stock,month]", stockPrices) result = mod.ReadFilePart(modelFileName, "DATA_RETURN_MARKER") except Exception as ex: print(ex) result = mod.LastResult return result def _getSolutionValues(self, model): solValues = [] solNames = [] investVect = model.VariableVectors["Invest"] investVect.ZeroTol = 0.0001; for var in investVect.Nonzeros: stName = investVect.Subscripts[1].ValueStr solNames.append(str(stName)) solValues.append(var.Activity) self._investAmounts = solValues self._investNames = solNames self._riskVariance = model.Solution.ObjectValue def SolveModel(self, solverName, targetReturn, monthNames, stockNames, stockPrices): 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 = "Portfolio" result = self._loadModel(model, targetReturn, monthNames, stockNames, stockPrices) 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(ex) pass 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._getSolutionValues(model) model.ClearModel() return True