Example #1
0
        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";
        }