//updates objective and variable public void populate_lblObj() { lblObj.Text = ""; MyGlobals.model.Update(); //objective function int int_sense = MyGlobals.model.Get(GRB.IntAttr.ModelSense); if (int_sense == -1) { lblObj.Text = "MAXIMIZE"; } else if (int_sense == 1) { lblObj.Text = "MINIMIZE"; } GRBLinExpr func = (GRBLinExpr)MyGlobals.model.GetObjective(); for (int i = 0; i < func.Size; i++) { lblObj.Text = lblObj.Text + " " + func.GetCoeff(i) + func.GetVar(i).Get(GRB.StringAttr.VarName) + " +"; } //populate variables present in obj GRBLinExpr con_info = (GRBLinExpr)MyGlobals.model.GetObjective(); Dictionary <string, GRBVar> D = new Dictionary <string, GRBVar>(); GRBVar var; for (int i = 0; i < con_info.Size; i++) { var = con_info.GetVar(i); D.Add(con_info.GetVar(i).Get(GRB.StringAttr.VarName), var); } // Bind combobox(edit var) to dictionary cmbVarName2.DataSource = new BindingSource(D, null); cmbVarName2.DisplayMember = "Key"; cmbVarName2.ValueMember = "Value"; // Bind combobox(delet var) to dictionary cmbVarName3.DataSource = new BindingSource(D, null); cmbVarName3.DisplayMember = "Key"; cmbVarName3.ValueMember = "Value"; //populate all variables combobox addvar GRBVar[] allVar = MyGlobals.model.GetVars(); Dictionary <string, GRBVar> D2 = new Dictionary <string, GRBVar>(); for (int i = 0; i < allVar.Length; i++) { D2.Add(allVar[i].Get(GRB.StringAttr.VarName), allVar[i]); } // Bind combobox(add new var) to dictionary cmbAddVar.DataSource = new BindingSource(D2, null); cmbAddVar.DisplayMember = "Key"; cmbAddVar.ValueMember = "Value"; }
private void btn_Update2_Click(object sender, EventArgs e) { try { double var_coco; double.TryParse(txtCoeff2.Text, out var_coco); MyGlobals.model.ChgCoeff(constraint, variable, var_coco); MyGlobals.model.Update(); populate_cmbConstraint(); BtnOK.Enabled = true; BtnCancel.Enabled = false; lblUpdate2.Text = ""; lblUpdate2.Text = constraint.Get(GRB.StringAttr.ConstrName) + ": "; GRBLinExpr con_info = (GRBLinExpr)MyGlobals.model.GetRow(constraint); for (int n = 0; n < con_info.Size; n++) { lblUpdate2.Text += " " + con_info.GetCoeff(n) + con_info.GetVar(n).Get(GRB.StringAttr.VarName) + " +"; } lblUpdate2.Text += " " + constraint.Get(GRB.CharAttr.Sense) + " " + constraint.Get(GRB.DoubleAttr.RHS) + "\n"; } catch (GRBException exc) { MessageBox.Show("Error code: " + exc.ErrorCode + ". " + exc.Message, "Error occured", MessageBoxButtons.OK); } txtVarName.Clear(); txtlb.Clear(); txtub.Clear(); }
private void ObjItem_LinkClicked(object sender, DevExpress.XtraNavBar.NavBarLinkEventArgs e) { GRBLinExpr func = (GRBLinExpr)MyGlobals.model.GetObjective(); if (func.Size != 0) { txtObj.Visible = true; lblObj.Visible = true; lblObj.Text = ""; //objective function int int_sense = MyGlobals.model.Get(GRB.IntAttr.ModelSense); if (int_sense == -1) { lblObj.Text = "MAXIMIZE"; } else if (int_sense == 1) { lblObj.Text = "MINIMIZE"; } for (int i = 0; i < func.Size; i++) { lblObj.Text = lblObj.Text + " " + func.GetCoeff(i) + func.GetVar(i).Get(GRB.StringAttr.VarName) + " +"; } } else { MessageBox.Show("You have not added any objective function!"); } }
//DELETE Variable private void cmbCon5_SelectedIndexChanged(object sender, EventArgs e) { constraint = ((KeyValuePair <string, GRBConstr>)cmbCon5.SelectedItem).Value; GRBLinExpr con_info = (GRBLinExpr)MyGlobals.model.GetRow(constraint); Dictionary <string, GRBVar> D = new Dictionary <string, GRBVar>(); GRBVar var; for (int i = 0; i < con_info.Size; i++) { var = con_info.GetVar(i); D.Add(con_info.GetVar(i).Get(GRB.StringAttr.VarName), var); } // Bind combobox(delete var) to dictionary cmbVarName3.DataSource = new BindingSource(D, null); cmbVarName3.DisplayMember = "Key"; cmbVarName3.ValueMember = "Value"; }
public override bool SetObj(object solver, int Column, double Value) { GRBModel grbSolver = solver as GRBModel; if (grbSolver == null) { return(false); } GRBLinExpr exp = grbSolver.GetObjective() as GRBLinExpr; exp.AddTerm(Value, exp.GetVar(Column)); return(true); }
//Add variable private void btnUpdate_Click(object sender, EventArgs e) { { try { //change GRBConst into GRBConst[] GRBConstr[] CON = new GRBConstr[1]; CON[0] = constraint; double var_coco; double.TryParse(txtAddCon.Text, out var_coco); //change double into double[] Double[] COEFF = new Double[1]; COEFF[0] = var_coco; //add variable to constraint MyGlobals.model.ChgCoeff(constraint, variable, var_coco); MyGlobals.model.Update(); populate_cmbConstraint(); BtnOK.Enabled = true; BtnCancel.Enabled = false; lblUpdate.Text = ""; lblUpdate.Text = constraint.Get(GRB.StringAttr.ConstrName) + ": "; GRBLinExpr con_info = (GRBLinExpr)MyGlobals.model.GetRow(constraint); for (int n = 0; n < con_info.Size; n++) { lblUpdate.Text += " " + con_info.GetCoeff(n) + con_info.GetVar(n).Get(GRB.StringAttr.VarName) + " +"; } lblUpdate.Text += " " + constraint.Get(GRB.CharAttr.Sense) + " " + constraint.Get(GRB.DoubleAttr.RHS) + "\n"; } catch (GRBException exc) { MessageBox.Show("Error code: " + exc.ErrorCode + ". " + exc.Message, "Error occured", MessageBoxButtons.OK); } } }
public void if_obj_loaded() { //IF OBJ IS ALREADY SET int int_sense = MyGlobals.model.Get(GRB.IntAttr.ModelSense); GRBLinExpr func = (GRBLinExpr)MyGlobals.model.GetObjective(); if ((int_sense == -1) || (int_sense == 1)) { if (func.Size != 0) { lblObj.Text = ""; lblSense.Text = ""; if (int_sense == -1) { lblSense.Text = "MAXIMIZE"; cmbSense.Text = "MAXIMIZE"; } else if (int_sense == 1) { lblSense.Text = "MINIMIZE"; cmbSense.Text = "MINIMIZE"; } for (int i = 0; i < func.Size; i++) { lblObj.Text = lblObj.Text + " " + func.GetCoeff(i) + func.GetVar(i).Get(GRB.StringAttr.VarName) + " +"; } cmbSense.Enabled = false; cmbVarName.Enabled = false; txtCoeff.Enabled = false; btn_Undo.Enabled = false; button7.Enabled = false; btnClear.Enabled = false; btnAddTerm.Enabled = false; btnOK.Enabled = true; btnNext.Enabled = true; } } }
private void btnUpdate_4_Click(object sender, EventArgs e) { double RHS; double.TryParse(txtRHS.Text, out RHS); constraint.Set(GRB.DoubleAttr.RHS, RHS); MyGlobals.model.Update(); populate_cmbConstraint(); BtnOK.Enabled = true; BtnCancel.Enabled = false; lblUpdate4.Text = ""; lblUpdate4.Text = constraint.Get(GRB.StringAttr.ConstrName) + ": "; GRBLinExpr con_info = (GRBLinExpr)MyGlobals.model.GetRow(constraint); for (int n = 0; n < con_info.Size; n++) { lblUpdate4.Text += " " + con_info.GetCoeff(n) + con_info.GetVar(n).Get(GRB.StringAttr.VarName) + " +"; } lblUpdate4.Text += " " + constraint.Get(GRB.CharAttr.Sense) + " " + constraint.Get(GRB.DoubleAttr.RHS) + "\n"; }
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"; }
//new variable is added to constraint private void btnAdd_Click(object sender, EventArgs e) { try { string var_name = txtVarName.Text; string var_type = this.cmbVarType.GetItemText(this.cmbVarType.SelectedItem); double var_lb, var_ub; double var_obco, var_coco; double.TryParse(txtlb.Text, out var_lb); double.TryParse(txtub.Text, out var_ub); double.TryParse(txtObCo.Text, out var_obco); double.TryParse(txtCo_coeff.Text, out var_coco); //change GRBConst into GRBConst[] GRBConstr[] CON = new GRBConstr[1]; CON[0] = constraint; //change double into double[] Double[] COEFF = new Double[1]; COEFF[0] = var_coco; GRBVar x; switch (var_type) { case "BINARY": if (use_infinite_ub == false) { x = MyGlobals.model.AddVar(var_lb, var_ub, var_obco, 'B', CON, COEFF, var_name); } else { x = MyGlobals.model.AddVar(var_lb, GRB.INFINITY, var_obco, 'B', CON, COEFF, var_name); } break; case "CONTINUOUS": if (use_infinite_ub == false) { x = MyGlobals.model.AddVar(var_lb, var_ub, var_obco, 'C', CON, COEFF, var_name); } else { x = MyGlobals.model.AddVar(var_lb, GRB.INFINITY, var_obco, 'C', CON, COEFF, var_name); } break; case "INTERGER": if (use_infinite_ub == false) { x = MyGlobals.model.AddVar(var_lb, var_ub, var_obco, 'I', CON, COEFF, var_name); } else { x = MyGlobals.model.AddVar(var_lb, GRB.INFINITY, var_obco, 'I', CON, COEFF, var_name); } break; case "SEMI-CONTINUOUS": if (use_infinite_ub == false) { x = MyGlobals.model.AddVar(var_lb, var_ub, var_obco, 'S', CON, COEFF, var_name); } else { x = MyGlobals.model.AddVar(var_lb, GRB.INFINITY, var_obco, 'S', CON, COEFF, var_name); } break; case "SEMI-INTERGER": if (use_infinite_ub == false) { x = MyGlobals.model.AddVar(var_lb, var_ub, var_obco, 'N', CON, COEFF, var_name); } else { x = MyGlobals.model.AddVar(var_lb, GRB.INFINITY, var_obco, 'N', CON, COEFF, var_name); } break; } MyGlobals.model.Update(); populate_cmbConstraint(); BtnOK.Enabled = true; BtnCancel.Enabled = false; lblUpdate.Text = ""; lblUpdate.Text = constraint.Get(GRB.StringAttr.ConstrName) + ": "; GRBLinExpr con_info = (GRBLinExpr)MyGlobals.model.GetRow(constraint); for (int n = 0; n < con_info.Size; n++) { lblUpdate.Text += " " + con_info.GetCoeff(n) + con_info.GetVar(n).Get(GRB.StringAttr.VarName) + " +"; } lblUpdate.Text += " " + constraint.Get(GRB.CharAttr.Sense) + " " + constraint.Get(GRB.DoubleAttr.RHS) + "\n"; } catch (GRBException exc) { MessageBox.Show("Error code: " + exc.ErrorCode + ". " + exc.Message, "Error occured", MessageBoxButtons.OK); } txtVarName.Clear(); txtlb.Clear(); txtub.Clear(); }
private void refresh_display() { //model information lblObj.Text = ""; lblCon.Text = ""; lblOptimal.Text = ""; lblInfeasible.Text = ""; MyGlobals.model.Update(); //objective function int int_sense = MyGlobals.model.Get(GRB.IntAttr.ModelSense); if (int_sense == -1) { lblObj.Text = "MAXIMIZE"; } else { lblObj.Text = "MINIMIZE"; } GRBLinExpr func = (GRBLinExpr)MyGlobals.model.GetObjective(); for (int i = 0; i < func.Size; i++) { lblObj.Text = lblObj.Text + " " + func.GetCoeff(i) + func.GetVar(i).Get(GRB.StringAttr.VarName) + " +"; } //constraints GRBConstr[] allCons = MyGlobals.model.GetConstrs(); GRBLinExpr con_info; string co_name; char co_sense; double co_RHS; int n; for (n = 0; n < allCons.Length; n++) { co_name = allCons[n].Get(GRB.StringAttr.ConstrName); co_sense = allCons[n].Get(GRB.CharAttr.Sense); co_RHS = allCons[n].Get(GRB.DoubleAttr.RHS); con_info = (GRBLinExpr)MyGlobals.model.GetRow(allCons[n]); lblCon.Text += co_name + ": "; for (int i = 0; i < con_info.Size; i++) { lblCon.Text += " " + con_info.GetCoeff(i) + con_info.GetVar(i).Get(GRB.StringAttr.VarName) + " +"; } lblCon.Text += " " + co_sense + " " + co_RHS + "\n"; } // Optimize model MyGlobals.model.Optimize(); int optimstatus = MyGlobals.model.Get(GRB.IntAttr.Status); //If the model is infeasible or unbounded, turn off presolve and solve the model again if (optimstatus == GRB.Status.INF_OR_UNBD) { MyGlobals.model.GetEnv().Set(GRB.IntParam.Presolve, 0); MyGlobals.model.Optimize(); optimstatus = MyGlobals.model.Get(GRB.IntAttr.Status); } //if the model is optimal, display solution in a worksheet if (optimstatus == GRB.Status.OPTIMAL) { load_optimal(); } //if the model is infeasible, compute IIS else if (optimstatus == GRB.Status.INFEASIBLE) { lblInfeasible.Text = "INFEASIBLE"; //compute IIS lblfollowing.Visible = true; lblRemove.Enabled = true; lblRemove.Visible = true; lblRemove.Text = ""; MyGlobals.model.ComputeIIS(); foreach (GRBConstr c in MyGlobals.model.GetConstrs()) { if (c.Get(GRB.IntAttr.IISConstr) == 1) { lblRemove.Text += c.Get(GRB.StringAttr.ConstrName) + " "; } } btnRemove.Enabled = true; btnRemove.Visible = true; spreadsheetControl1.Visible = false; btn_Excel.Enabled = false; btn_HTML.Enabled = false; btn_PDF.Enabled = false; btn_SaveSol.Enabled = false; } //if the model is unbounded else if (optimstatus == GRB.Status.UNBOUNDED) { lblInfeasible.Text = "UNBOUNED\nModel cannot be solved."; spreadsheetControl1.Visible = false; btn_Excel.Enabled = false; btn_HTML.Enabled = false; btn_PDF.Enabled = false; btn_SaveSol.Enabled = false; } //NEITHER INFEASIBLE, NOR OPTIMAL, NOR UNBOUNDED else { lblInfeasible.Text = "Optimization stopped with \nstatus = " + optimstatus; } }
private void FrmAnalyze_Load(object sender, EventArgs e) { MyGlobals.model.Update(); //MODEL INFORMATION lblObj.Text = ""; lblCon.Text = ""; //OBJECTIVE FUNCTION int int_sense = MyGlobals.model.Get(GRB.IntAttr.ModelSense); if (int_sense == -1) { lblObj.Text = "MAXIMIZE"; } else { lblObj.Text = "MINIMIZE"; } GRBLinExpr func = (GRBLinExpr)MyGlobals.model.GetObjective(); for (int i = 0; i < func.Size; i++) { lblObj.Text = lblObj.Text + " " + func.GetCoeff(i) + func.GetVar(i).Get(GRB.StringAttr.VarName) + " +"; } //CONSTRAINTS GRBConstr[] allCons = MyGlobals.model.GetConstrs(); GRBLinExpr con_info; string co_name; char co_sense; double co_RHS; int n; for (n = 0; n < allCons.Length; n++) { co_name = allCons[n].Get(GRB.StringAttr.ConstrName); co_sense = allCons[n].Get(GRB.CharAttr.Sense); co_RHS = allCons[n].Get(GRB.DoubleAttr.RHS); con_info = (GRBLinExpr)MyGlobals.model.GetRow(allCons[n]); lblCon.Text += co_name + ": "; for (int i = 0; i < con_info.Size; i++) { lblCon.Text += " " + con_info.GetCoeff(i) + con_info.GetVar(i).Get(GRB.StringAttr.VarName) + " +"; } lblCon.Text += " " + co_sense + " " + co_RHS + "\n"; } MyGlobals.model.Optimize(); //VARIABLE TYPE PIE CHART //variables type count int varnum = MyGlobals.model.Get(GRB.IntAttr.NumVars); int NXnum = MyGlobals.model.Get(GRB.IntAttr.NumNZs); int INTnum = MyGlobals.model.Get(GRB.IntAttr.NumIntVars); int BINnum = MyGlobals.model.Get(GRB.IntAttr.NumBinVars); int CONnum = 0; int SEMINTnum = 0; int SEMICONnum = 0; GRBVar[] allVar = MyGlobals.model.GetVars(); for (int i = 0; i < allVar.Length; i++) { if (allVar[i].Get(GRB.CharAttr.VType) == 'C') { CONnum++; } if (allVar[i].Get(GRB.CharAttr.VType) == 'S') { SEMICONnum++; } if (allVar[i].Get(GRB.CharAttr.VType) == 'N') { SEMINTnum++; } } Dictionary <string, int> D = new Dictionary <string, int>(); D.Add("Integer", INTnum); D.Add("Binary", BINnum); D.Add("Continous", CONnum); D.Add("Semi-Integer", SEMINTnum); D.Add("Semi-Continous", SEMICONnum); // Create a chart. ChartControl chartControl1 = new ChartControl(); // Create an empty Bar series and add it to the chart. Series Series_VarType = new Series("Series1", ViewType.Pie); chartControl1.Series.Add(Series_VarType); // Bind chart to dictionary Series_VarType.DataSource = new BindingSource(D, null); // Specify data members to bind the series. Series_VarType.ArgumentScaleType = ScaleType.Qualitative; Series_VarType.ArgumentDataMember = "Key"; Series_VarType.ValueScaleType = ScaleType.Numerical; Series_VarType.ValueDataMembers.AddRange(new string[] { "Value" }); // Adjust the text pattern of the series label. PieSeriesLabel label = (PieSeriesLabel)Series_VarType.Label; label.TextPattern = "{A}: {V:F1} ({VP:P0})"; chartControl1.PaletteName = "Flow"; chartControl1.PaletteBaseColorNumber = 0; // Dock the chart into its parent and add it to the current form. chartControl1.Dock = DockStyle.Bottom; groupBox1.Controls.Add(chartControl1); //OPTIMIZATION RESULTS lblRuntime.Text = ""; lblSolCount.Text = ""; lblOptimal.Text = ""; lblInfeasible.Text = ""; lblRuntime.Text = ""; lblObjSol.Text = ""; lblbound.Text = ""; lblGap.Text = ""; double Runtime = MyGlobals.model.Get(GRB.DoubleAttr.Runtime); if (MyGlobals.model.Get(GRB.IntAttr.Status) == GRB.Status.OPTIMAL) { double ObjSol = MyGlobals.model.Get(GRB.DoubleAttr.ObjVal); double Bound = MyGlobals.model.Get(GRB.DoubleAttr.ObjBound); double Gap = MyGlobals.model.Get(GRB.DoubleAttr.MIPGap); int SolCount = MyGlobals.model.Get(GRB.IntAttr.SolCount); lblOptimal.Text = "OPTIMAL"; lblSolCount.Text = SolCount.ToString(); lblRuntime.Text = Math.Round(Runtime, 3).ToString(); lblObjSol.Text = ObjSol.ToString(); lblbound.Text = Bound.ToString(); lblGap.Text = Gap.ToString(); } else { lblInfeasible.Text = "INFEASIBLE"; lblRuntime.Text = Runtime.ToString(); } //ALGORITHM ITERATION CHART double simplex = MyGlobals.model.Get(GRB.DoubleAttr.IterCount); int bar = MyGlobals.model.Get(GRB.IntAttr.BarIterCount); double barrier = Convert.ToDouble(bar); double branchncut = MyGlobals.model.Get(GRB.DoubleAttr.NodeCount); Dictionary <string, double> DA = new Dictionary <string, double>(); DA.Add("Simplex Iterations", simplex); DA.Add("Barrier Iterations", barrier); DA.Add("Branch-n-Cut Nodes", branchncut); // Create a chart. ChartControl chartControl2 = new ChartControl(); // Create an empty Bar series and add it to the chart. Series Series_Iteration = new Series("Series2", ViewType.Bar); chartControl2.Series.Add(Series_Iteration); // Bind chart to dictionary Series_Iteration.DataSource = new BindingSource(DA, null); // Specify data members to bind the series. Series_Iteration.ArgumentScaleType = ScaleType.Qualitative; Series_Iteration.ArgumentDataMember = "Key"; Series_Iteration.ValueScaleType = ScaleType.Numerical; Series_Iteration.ValueDataMembers.AddRange(new string[] { "Value" }); // Adjust the text pattern of the series label. BarSeriesLabel lbl = (BarSeriesLabel)Series_Iteration.Label; lbl.TextPattern = "{V:F1}"; Legend legend = chartControl2.Legend; // Display the chart control's legend. legend.Visible = false; chartControl2.PaletteName = "Flow"; chartControl2.PaletteBaseColorNumber = 0; // Dock the chart into its parent and add it to the current form. chartControl2.Dock = DockStyle.Fill; pnl_algo.Controls.Add(chartControl2); //COEFF STATS CHART double MAXCOEFF = MyGlobals.model.Get(GRB.DoubleAttr.MaxCoeff); double MINCOEFF = MyGlobals.model.Get(GRB.DoubleAttr.MinCoeff); double MAXBOUND = MyGlobals.model.Get(GRB.DoubleAttr.MaxBound); double MINBOUND = MyGlobals.model.Get(GRB.DoubleAttr.MinBound); double MAXOBJCOEFF = MyGlobals.model.Get(GRB.DoubleAttr.MaxObjCoeff); double MINOBJCOEFF = MyGlobals.model.Get(GRB.DoubleAttr.MinObjCoeff); // Create a chart. ChartControl chartControl3 = new ChartControl(); // Create an empty Bar series and add it to the chart. Series Series_Coeff = new Series("Series3", ViewType.RangeBar); // Add points to them. Series_Coeff.Points.Add(new SeriesPoint("Matrix Coefficient", MAXCOEFF, MINCOEFF)); Series_Coeff.Points.Add(new SeriesPoint("Variable Bound", MAXBOUND, MINBOUND)); Series_Coeff.Points.Add(new SeriesPoint("Linear Obj Coefficient", MAXOBJCOEFF, MINOBJCOEFF)); chartControl3.Series.Add(Series_Coeff); // Adjust the text pattern of the series label. RangeBarSeriesLabel lbl2 = (RangeBarSeriesLabel)Series_Coeff.Label; lbl2.TextPattern = "{V:F1}"; // Hide the legend (if necessary). chartControl3.Legend.Visible = false; chartControl3.PaletteName = "Flow"; chartControl3.PaletteBaseColorNumber = 0; // Dock the chart into its parent and add it to the current form. chartControl3.Dock = DockStyle.Fill; pnl_coeff.Controls.Add(chartControl3); }
private void btnBrowse_Click(object sender, EventArgs e) { openFileDialog1.Filter = "Model Files (LP)|*.LP"; if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK) { string ext = Path.GetExtension(openFileDialog1.FileName); //Dispose previous model MyGlobals.model.Dispose(); MyGlobals.env.Dispose(); lblFilename.Text = ""; lblObjective.Text = ""; lblVar.Text = ""; lblCon.Text = ""; MyGlobals.env = new GRBEnv(); MyGlobals.model = new GRBModel(MyGlobals.env, openFileDialog1.FileName); btn_Optimize.Enabled = true; if (ext == ".lp") { lblFilename.Text = openFileDialog1.FileName; //objective function int int_sense = MyGlobals.model.Get(GRB.IntAttr.ModelSense); if (int_sense == -1) { lblObjective.Text = "MAXIMIZE"; } else { lblObjective.Text = "MINIMIZE"; } GRBLinExpr func = (GRBLinExpr)MyGlobals.model.GetObjective(); for (int i = 0; i < func.Size; i++) { lblObjective.Text = lblObjective.Text + " " + func.GetCoeff(i) + func.GetVar(i).Get(GRB.StringAttr.VarName) + " +"; } //variables GRBVar[] allVars = MyGlobals.model.GetVars(); int n; for (n = 0; n < allVars.Length; n++) { lblVar.Text += allVars[n].Get(GRB.StringAttr.VarName) + ", "; } //constraints GRBLinExpr con_info; GRBConstr[] allCons = MyGlobals.model.GetConstrs(); string co_name; char co_sense; double co_RHS; for (n = 0; n < allCons.Length; n++) { co_name = allCons[n].Get(GRB.StringAttr.ConstrName); co_sense = allCons[n].Get(GRB.CharAttr.Sense); co_RHS = allCons[n].Get(GRB.DoubleAttr.RHS); con_info = (GRBLinExpr)MyGlobals.model.GetRow(allCons[n]); lblCon.Text += co_name + ": "; for (int i = 0; i < con_info.Size; i++) { lblCon.Text += " " + con_info.GetCoeff(i) + con_info.GetVar(i).Get(GRB.StringAttr.VarName) + " +"; } lblCon.Text += " " + co_sense + " " + co_RHS + "\n"; } } else { MessageBox.Show("The File is not LP."); MyGlobals.model.Dispose(); MyGlobals.env.Dispose(); } } }