23 비공개목록<string> 컷 =
신규목록<문자열>()
"i1",
"i2",
"i3",
"i4"};
24 비공개사전<string, int> d =
신규사전<string, int>()
"i1", 97 }, {
"i2", 610 }, {
"i3", 395 }, {
"i4", 211 } };
25 비공개사전<string, int> w =
신규사전<string, int>()
"i1", 47 }, {
"i2", 36 }, {
"i3", 31 }, {
"i4", 14 } };
29 비공개목록<색상> 색상 =
신규목록<색상>() 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) ;
45flowLayoutPanel1.Controls.Add(
신규 CutWidthsControl(i, w[i], (
int) nudWidth.Value, d[i], colors[nrCuts%colors.Count], nudWidth));
51 비공개 무효button3_Click(
객체발신자, EventArgs e)
53flowLayoutPanel1.Controls.Add(
신규 CutWidthsControl(
"나"+ (nrCuts + 1), (
int)nudWidth.값, (
int)nudWidth.Value, 0, colors[nrCuts % colors.Count], nudWidth));
54flowLayoutPanel1.VerticalScroll.Value = flowLayoutPanel1.VerticalScroll.Maximum;
55flowLayoutPanel1.Update();
56flowLayoutPanel1.VerticalScroll.Value = flowLayoutPanel1.VerticalScroll.Maximum;
61 비공개 무효button2_Click(
객체발신자, EventArgs e)
64MessageBox.Show(
"적어도 하나는 있어야 하기 때문에 마지막 절단 너비를 삭제할 수 없습니다.");
67flowLayoutPanel1.Controls.RemoveAt(nrCuts-1);
68flowLayoutPanel1.Update();
73 비공개 무효button1_Click(
객체발신자, EventArgs e)
76tabControl1.Visible =
거짓;
77tabControl1.TabPages.Clear();
85opt.AllModelTypes =
"CBC";
87선택.
정의.추가(
"pmax", nudMax.Value.ToString());
88선택.
정의.추가(
"solveMasterAs",
"RMIP");
99widths.AddRecord(cutWidth.Name);
100demand.AddRecord(cutWidth.Name).Value = cutWidth.DemandValue;
101너비.AddRecord(cutWidth.Name).Value = cutWidth.WidthValue;
106 GAMSJobmasterInitJob = ws.AddJobFromString(GetMasterModel());
107masterInitJob.
실행(opt, masterCP, cutstockData);
109 GAMSJobmasterJob = ws.AddJobFromString(
"execute_load 'csdata', aip, pp; %solveMasterAs%를 사용하여 마스터 min z 해결;", 마스터CP);
111 GAMSSet패턴 = cutstockData.AddSet(
"pp", 1,
"패턴 색인");
112 메가 슬롯매개변수patternData = cutstockData.AddParameter(
"아이피", 2,
"패턴 데이터");
119patternData.AddRecord(rec.Keys[0], 패턴.AddRecord((++patternCount).ToString()).Keys[0]).Value = (int)((
int)nudWidth.값/rec.
값);
124ws.AddJobFromString(GetSubModel()).Run(opt, subCP, cutstockData);
135masterJob.Run(opt, masterCP, cutstockData);
144 if(patternCount == maxpattern)
146richTextBox1.AppendText(
"패턴이 벗어났습니다. 최대 패턴을 늘리십시오(현재 "+ nudMax.Value +
")."+ Environment.NewLine);
152richTextBox1.ScrollToCaret();
158patternData.AddRecord(y.Keys[0], s.Keys[0]).Value = Math.Round(y.
레벨);
167opt.정의[
"solveMasterAs"] =
"MIP";
168masterJob.Run(opt, cutstockData);
169richTextBox1.AppendText(
"최적의 해결책: "+ masterJob.OutDB.GetVariable(
"z").FindRecord().레벨 + Environment.NewLine); richTextBox1.ScrollToCaret();
170tabControl1.Visible =
참;
175richTextBox1.AppendText(String.Format(
" 패턴 0,2 1,4 회: ", xp.Keys[0], Math.Round(xp.
레벨))); richTextBox1.ScrollToCaret();
177탭페이지 tp =
신규탭페이지(
"패턴"+ xp.Keys[0].ToString());
178tp.BackColor = Color.White;
179tabControl1.TabPages.Add(tp);
182 더블scale = tp.Width/masterJob.OutDB.GetParameter(
"r").FirstRecord().값;
185richTextBox1.AppendText(
" "+ aip.Keys[0] +
": "+ aip.
값.ToString()); richTextBox1.ScrollToCaret();
187 for (
inti = 0; 나 <알았어.
값; 나++)
190p.BorderStyle = BorderStyle.FixedSingle;
191p.BackColor = flowLayoutPanel1.Controls.Find(aip.Keys[0],
참)[0].BackColor;
193p.Width = (int) (width.FindRecord(aip.Keys[0]).Value * scale);
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(
"예외: "+ 예: 메시지);
222 정적문자열 GetMasterModel()
236$pmax를 설정하지 않은 경우 $set pmax 1000
237p개의 가능한 패턴 설정 /1*%pmax%/
240aip(i,p) p에서 성장하는 패턴의 너비 i 수;
245정수 변수 xp; xp.up(p) = 합계(i, d(i));
250numpat.. z =e= sum(pp, xp(pp));
251수요(i).. sum(pp, aip(i,pp)*xp(pp)) =g= d(i);
253모델 마스터 /numpat, 수요/;";
260$제목 절단 재고 - 가격 문제는 배낭 모델임
272demdual(i) 마스터 수요 제약 조건의 이중 /#i eps/;
275정수 변수 y; y.up(i) = ceil(r/w(i));
280defobj.. z =e= 1 - sum(i, demdual(i)*y(i));
281배낭.. sum(i, w(i)*y(i)) =l= r;
283모델 가격 /defobj, 배낭/; 가격.optfile=1";
288 비공개 공허button4_Click(
객체발신자, EventArgs e)
290OpenFileDialog 브라우저 =
신규OpenFileDialog();
292browser.DefaultExt =
"accdb";
293browser.Filter =
"액세스 데이터베이스(*.accdb)|*.accdb";
294browser.InitialDirectory = 환경.CurrentDirectory;
296 if(browser.ShowDialog() == DialogResult.OK)
299OleDbConnection 연결 =
널;
302연결 =
신규OleDbConnection(
"공급자=Microsoft.ACE.OLEDB.12.0;데이터 소스="+ 브라우저.파일 이름);
307flowLayoutPanel1.Controls.RemoveAt(nrCuts-1);
310flowLayoutPanel1.Update();
312OleDbCommand cmd =
신규OleDb명령(
"RawWidth에서 너비 선택", 연결);
314OleDbDataReader 리더 = cmd.ExecuteReader();
317nudWidth.Value = (int)reader.GetValue(0);
321cmd =
신규OleDb명령(
"CutWidths에서 라벨, 너비, 수요 선택", 연결);
322reader = cmd.ExecuteReader();
324flowLayoutPanel1.Controls.Add(
신규 CutWidthsControl(reader.GetString(0), (
int)reader.GetValue(1), (
int)nudWidth.값, (
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(
"데이터베이스에서 데이터를 읽는 동안 오류가 발생했습니다. \n"+ 예: 메시지);