: Form
23 privateList<string> cuts =
newList<string>() {
"i1",
"i2",
"i3",
"i4"};
24 privateDictionary<string, int> d =
newDictionary<string, int>() { {
"i1", 97 }, {
"i2", 610 }, {
"i3", 395 }, {
"i4", 211 } };
25 privateDictionary<string, int> w =
newDictionary<string, int>() { {
"i1", 47 }, {
"i2", 36 }, {
"i3", 31 }, {
"i4", 14 } };
27 private intmaxpattern = 35;
28 private intnrCuts = 0;
29 privateList<Color> colors =
newList<Color>() { Color.FromArgb(255, 192, 255, 255), Color.FromArgb(255, 255, 255, 192),
30Color.FromArgb(255, 192, 255, 192), Color.FromArgb(255, 255, 224, 192),
31Color.FromArgb(255, 255, 192, 255), Color.FromArgb(255, 129, 255, 192),
32Color.FromArgb(255, 192, 192, 255), Color.FromArgb(255, 255, 192, 192),
33Color.FromArgb(255, 100, 192, 220), Color.FromArgb(255, 129, 100, 192),
34Color.FromArgb(255, 192, 192, 100), Color.FromArgb(255, 255, 192, 100) };
38InitializeComponent();
40nudMax.Value = maxpattern;
43 foreach(
stringi
incuts)
45flowLayoutPanel1.Controls.Add(
new CutWidthsControl(i, w[i], (
int) nudWidth.Value, d[i], colors[nrCuts%colors.Count], nudWidth));
51 private voidbutton3_Click(
objectsender, EventArgs e)
53flowLayoutPanel1.Controls.Add(
new CutWidthsControl(
"i"+ (nrCuts + 1), (
int)nudWidth.Value, (
int)nudWidth.Value, 0, colors[nrCuts % colors.Count], nudWidth));
54flowLayoutPanel1.VerticalScroll.Value = flowLayoutPanel1.VerticalScroll.Maximum;
55flowLayoutPanel1.Update();
56flowLayoutPanel1.VerticalScroll.Value = flowLayoutPanel1.VerticalScroll.Maximum;
61 private voidbutton2_Click(
objectsender, EventArgs e)
64MessageBox.Show(
"Can't delete last cut width because there has to be at least one.");
67flowLayoutPanel1.Controls.RemoveAt(nrCuts-1);
68flowLayoutPanel1.Update();
73 private voidbutton1_Click(
objectsender, EventArgs e)
76tabControl1.Visible =
false;
77tabControl1.TabPages.Clear();
85opt.AllModelTypes =
"Cbc";
87opt.
Defines.Add(
"pmax", nudMax.Value.ToString());
88opt.
Defines.Add(
"solveMasterAs",
"RMIP");
99widths.AddRecord(cutWidth.Name);
100demand.AddRecord(cutWidth.Name).Value = cutWidth.DemandValue;
101width.AddRecord(cutWidth.Name).Value = cutWidth.WidthValue;
106 GAMSJobmasterInitJob = ws.AddJobFromString(GetMasterModel());
107masterInitJob.
Run(opt, masterCP, cutstockData);
109 GAMSJobmasterJob = ws.AddJobFromString(
"execute_load 'csdata', aip, pp; solve master min z using %solveMasterAs%;", masterCP);
111 GAMSSetpattern = cutstockData.AddSet(
"pp", 1,
"pattern index");
112 GAMSParameterpatternData = cutstockData.AddParameter(
"aip", 2,
"pattern data");
115 intpatternCount = 0;
119patternData.AddRecord(rec.Keys[0], pattern.AddRecord((++patternCount).ToString()).Keys[0]).Value = (int)((
int)nudWidth.Value / rec.
Value);
124ws.AddJobFromString(GetSubModel()).Run(opt, subCP, cutstockData);
132 boolpatternAdded =
true;
135masterJob.Run(opt, masterCP, cutstockData);
144 if(patternCount == maxpattern)
146richTextBox1.AppendText(
"Out of pattern. Increase maxpattern (currently "+ nudMax.Value +
")."+ Environment.NewLine);
147patternAdded =
false;
152richTextBox1.ScrollToCaret();
153 GAMSSetRecords = pattern.AddRecord((++patternCount).ToString());
158patternData.AddRecord(y.Keys[0], s.Keys[0]).Value = Math.Round(y.
Level);
163 elsepatternAdded =
false;
164}
while(patternAdded);
167opt.Defines[
"solveMasterAs"] =
"MIP";
168masterJob.Run(opt, cutstockData);
169richTextBox1.AppendText(
"Optimal Solution: "+ masterJob.OutDB.GetVariable(
"z").FindRecord().Level + Environment.NewLine); richTextBox1.ScrollToCaret();
170tabControl1.Visible =
true;
175richTextBox1.AppendText(String.Format(
" pattern {0,2} {1,4} times: ", xp.Keys[0], Math.Round(xp.
Level))); richTextBox1.ScrollToCaret();
176 GAMSParameterRecordaip = masterJob.OutDB.GetParameter(
"aip").FirstRecord(
" ", xp.Keys[0]);
177TabPage tp =
newTabPage(
"pattern "+ xp.Keys[0].ToString());
178tp.BackColor = Color.White;
179tabControl1.TabPages.Add(tp);
182 doublescale = tp.Width/masterJob.OutDB.GetParameter(
"r").FirstRecord().Value;
185richTextBox1.AppendText(
" "+ aip.Keys[0] +
": "+ aip.
Value.ToString()); richTextBox1.ScrollToCaret();
187 for(
inti = 0; i < aip.
Value; i++)
189Panel p =
newPanel();
190p.BorderStyle = BorderStyle.FixedSingle;
191p.BackColor = flowLayoutPanel1.Controls.Find(aip.Keys[0],
true)[0].BackColor;
192p.Height = tp.Height;
193p.Width = (int) (width.FindRecord(aip.Keys[0]).Value * scale);
198}
while(aip.MoveNext());
200Panel pExcess =
newPanel();
201pExcess.BorderStyle = BorderStyle.FixedSingle;
202pExcess.BackColor = Color.LightGray;
203pExcess.Height = tp.Height;
204pExcess.Width = (int) (rawWidth.FirstRecord().Value*scale - x);
206tp.Controls.Add(pExcess);
208richTextBox1.AppendText(Environment.NewLine); richTextBox1.ScrollToCaret();
212cutstockData.Dispose();
218richTextBox1.AppendText(
"Exception: "+ ex.Message);
222 staticString GetMasterModel()
225$Title Cutting Stock - Master problem 236$if not set pmax $set pmax 1000 237Set p possible patterns /1*%pmax%/ 238 pp(p) dynamic subset of p 240 aip(i,p) number of width i in pattern growing in p; 243Variable xp(p) patterns used 245Integer variable xp; xp.up(p) = sum(i, d(i)); 247Equation numpat number of patterns used 248 demand(i) meet demand; 250numpat.. z =e= sum(pp, xp(pp)); 251demand(i).. sum(pp, aip(i,pp)*xp(pp)) =g= d(i); 253model master /numpat, demand/;";
257 staticString GetSubModel()
260$Title Cutting Stock - Pricing problem is a knapsack model 272 demdual(i) duals of master demand constraint /#i eps/; 274Variable z, y(i) new pattern; 275Integer variable y; y.up(i) = ceil(r/w(i)); 278 knapsack knapsack constraint; 280defobj.. z =e= 1 - sum(i, demdual(i)*y(i)); 281knapsack.. sum(i, w(i)*y(i)) =l= r; 283model pricing /defobj, knapsack/; pricing.optfile=1";
288 private voidbutton4_Click(
objectsender, EventArgs e)
290OpenFileDialog browser =
newOpenFileDialog();
292browser.DefaultExt =
"accdb";
293browser.Filter =
"Access Database (*.accdb)|*.accdb";
294browser.InitialDirectory = Environment.CurrentDirectory;
296 if(browser.ShowDialog() == DialogResult.OK)
299OleDbConnection connection =
null;
302connection =
newOleDbConnection(
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source="+ browser.FileName);
307flowLayoutPanel1.Controls.RemoveAt(nrCuts-1);
310flowLayoutPanel1.Update();
312OleDbCommand cmd =
newOleDbCommand(
"SELECT Width FROM RawWidth", connection);
314OleDbDataReader reader = cmd.ExecuteReader();
315 while(reader.Read())
317nudWidth.Value = (int)reader.GetValue(0);
321cmd =
newOleDbCommand(
"SELECT Label, Width, Demand FROM CutWidths", connection);
322reader = cmd.ExecuteReader();
323 while(reader.Read()) {
324flowLayoutPanel1.Controls.Add(
new CutWidthsControl(reader.GetString(0), (
int)reader.GetValue(1), (
int)nudWidth.Value, (
int)reader.GetValue(2), colors[nrCuts % colors.Count], nudWidth));
325flowLayoutPanel1.VerticalScroll.Value = flowLayoutPanel1.VerticalScroll.Maximum;
326flowLayoutPanel1.Update();
327flowLayoutPanel1.VerticalScroll.Value = flowLayoutPanel1.VerticalScroll.Maximum;
334MessageBox.Show(
"Error reading data from database. \n"+ ex.Message);
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4