public override double GetValue(IVariable variable) { var row = GetRowArray(); LpSolvePointer.get_variables(row); return(row[VariableId(variable) - 1]); }
private void AddRowConstraint(double[] row, lpsolve_constr_types type = lpsolve_constr_types.EQ, double val = 0) { Rows++; if (!LpSolvePointer.add_constraint(row, type, val)) { throw new InvalidOperationException(); } }
protected override IVariable InternalCreate(string name, Domain domain) { var variable = AddNewVariable(); variable.Domain = domain; variable.Name = name; if (!LpSolvePointer.set_col_name(variable.Id, name)) { throw new InvalidOperationException(); } if (variable.IsBinary()) { if (!LpSolvePointer.set_binary(variable.Id, true)) { throw new InvalidOperationException(); } return(variable); } if (variable.IsInteger()) { if (!LpSolvePointer.set_int(variable.Id, true)) { throw new InvalidOperationException(); } } switch (domain) { case Domain.AnyInteger: case Domain.AnyReal: case Domain.AnyConstantInteger: case Domain.AnyConstantReal: if (!LpSolvePointer.set_unbounded(variable.Id)) { throw new InvalidOperationException(); } break; case Domain.PositiveOrZeroInteger: case Domain.PositiveOrZeroReal: case Domain.PositiveOrZeroConstantInteger: case Domain.PositiveOrZeroConstantReal: if (!LpSolvePointer.set_lowbo(variable.Id, 0)) { throw new InvalidOperationException(); } break; case Domain.BinaryInteger: case Domain.BinaryConstantInteger: break; default: throw new ArgumentOutOfRangeException(nameof(domain), domain, null); } return(variable); }
protected override void InternalLoadModelFromFile(string modelPath) { LpSolvePointer.delete_lp(); LpSolve.Init(); var IMPORTANT = 3; var MPS_FREE = 8; LpSolvePointer = Path.GetExtension(modelPath)?.Trim('.').ToLower() == "lp" ? LpSolve.read_LP(modelPath, IMPORTANT, null) : LpSolve.read_MPS(modelPath, IMPORTANT | MPS_FREE); }
public override void SaveModelToFile(string modelPath) { if (Path.GetExtension(modelPath)?.Trim('.').ToLower() == "lp") { LpSolvePointer.write_lp(modelPath); } else { LpSolvePointer.write_freemps(modelPath); } }
protected override void InternalAddGoal(string name, IVariable operation) { var goal = GetRowArray(); goal[VariableId(operation)] = 1; LpSolvePointer.set_maxim(); if (!LpSolvePointer.set_obj_fn(goal)) { throw new InvalidOperationException(); } }
private LpSolveVariable AddNewVariable() { Columns++; var variable = new LpSolveVariable { Id = Columns, MilpManager = this }; if (!LpSolvePointer.add_column(GetColumnArray())) { throw new InvalidOperationException(); } return(variable); }
public override SolutionStatus GetStatus() { var status = LpSolvePointer.get_status(); if (status == (int)lpsolve_return.OPTIMAL) { return(SolutionStatus.Optimal); } if (status == (int)lpsolve_return.UNBOUNDED) { return(SolutionStatus.Unbounded); } if (status == (int)lpsolve_return.INFEASIBLE) { return(SolutionStatus.Infeasible); } return(SolutionStatus.Unknown); }
public override void Solve() { LpSolvePointer.solve(); }