static void SolveDual3(GRBEnv env, HashSet <string> nodes_set, List <Arc> arcs) { GRBModel dual = new GRBModel(env); Dictionary <string, GRBConstr> flow_balance = new Dictionary <string, GRBConstr>(); Dictionary <Arc, GRBVar> arc_traversed = new Dictionary <Arc, GRBVar>(); GRBConstr[] constrs = dual.AddConstrs(nodes_set.Count); dual.Update(); int i = 0; foreach (string s in nodes_set) { GRBConstr con = constrs[i]; con.Set(GRB.StringAttr.ConstrName, "flow_balance." + s); con.Set(GRB.CharAttr.Sense, GRB.EQUAL); flow_balance[s] = con; ++i; } flow_balance[ORIGIN].Set(GRB.DoubleAttr.RHS, -1); flow_balance[DESTINATION].Set(GRB.DoubleAttr.RHS, 1); foreach (Arc a in arcs) { GRBColumn col = new GRBColumn(); col.AddTerm(1, flow_balance[a.dest]); col.AddTerm(-1, flow_balance[a.source]); arc_traversed[a] = dual.AddVar(0, 1, a.length, GRB.CONTINUOUS, col, "arc_traversed." + a.source + "." + a.dest); } dual.Optimize(); dual.Write("dual3.lp"); dual.Write("dual3.sol"); dual.Dispose(); }
private void btnUpdate_3_Click(object sender, EventArgs e) { string sense = this.cmbSense.GetItemText(this.cmbSense.SelectedItem); switch (sense) { case "EQUAL": constraint.Set(GRB.CharAttr.Sense, '='); break; case "LESS EQUAL": constraint.Set(GRB.CharAttr.Sense, '<'); break; case "GREATER EQUAL": constraint.Set(GRB.CharAttr.Sense, '>'); break; } //display constraint MyGlobals.model.Update(); populate_cmbConstraint(); BtnOK.Enabled = true; BtnCancel.Enabled = false; lblUpdate3.Text = ""; lblUpdate3.Text = constraint.Get(GRB.StringAttr.ConstrName) + ": "; GRBLinExpr con_info = (GRBLinExpr)MyGlobals.model.GetRow(constraint); for (int n = 0; n < con_info.Size; n++) { lblUpdate3.Text += " " + con_info.GetCoeff(n) + con_info.GetVar(n).Get(GRB.StringAttr.VarName) + " +"; } lblUpdate3.Text += " " + constraint.Get(GRB.CharAttr.Sense) + " " + constraint.Get(GRB.DoubleAttr.RHS) + "\n"; }