로드 중...
검색 중...
일치하는 항목 없음
Form1.cs
1사용 중시스템;
2사용 중System.Collections.Generic;
3사용 중System.ComponentModel;
4사용 중시스템.데이터;
5사용 중시스템.드로잉;
6사용 중System.Linq;
7사용 중시스템.텍스트;
8사용 중System.Windows.Forms;
9사용 중슬롯 게임;
10사용 중System.Windows.Forms.DataVisualization.Charting;
11사용 중시스템.진단;
12사용 중System.Data.OleDb;
13사용 중시스템.반사;
14
15네임스페이스운송GUI
16{
24 공개 부분 수업양식1: 양식
25{
26 비공개사전<튜플<문자열, 문자열>,더블> 거리 =신규사전<Tuple<문자열, 문자열>,더블>()
27{
28{신규튜플<문자열,문자열> ("시애틀", "뉴욕"), 2.5 },
29{신규튜플<문자열,문자열> ("시애틀", "시카고"), 1.7 },
30{신규튜플<문자열,문자열> ("시애틀", "토피카"), 1.8 },
31{신규튜플<문자열,문자열> ("샌디에고", "뉴욕"), 2.5 },
32{신규튜플<문자열,문자열> ("샌디에고", "시카고"), 1.8 },
33{신규튜플<문자열,문자열> ("샌디에고", "토피카"), 1.4 }
34};
35
36 비공개사전<문자열, 더블> 용량 =신규사전<string, double>()
37{
38{"시애틀", 350},
39{"샌디에고", 600}
40};
41
42 비공개사전<문자열, 더블> 수요 =신규사전<문자열, 더블>()
43{
44{"뉴욕", 325},
45{"시카고", 300},
46{"토피카", 275}
47};
48
49 비공개 더블phiMin = 0.2;
50 비공개 더블phiMax = 1.0;
51 비공개 더블phiSteps = 0.05;
52
53 비공개사전<string, List<Tuple<String,String,double>>> resultX;
54
55 공개 양식1()
56{
57초기화구성요소();
58this.chart1.Series.Clear();
59this.chart1.Visible =거짓;
60this.chart1.ChartAreas[0].AxisY.Title ="$ (x1000)";
61this.chart1.ChartAreas[0].AxisY.TextOrientation = TextOrientation.Horizontal;
62this.chart1.ChartAreas[0].AxisX.Title ="파이";
63this.chart1.ChartAreas[0].AxisX.TextOrientation = TextOrientation.Horizontal;
64 // 기본 데이터를 데이터 그리드에 바인딩
65 foreach(튜플<문자열, 문자열> tin거리.키)
66this.dataGridDistance.Rows.Add(신규 문자열[] t.Item1, t.Item2, 거리[t].ToString() );
67 foreach (문자열tin용량.키)
68this.dataGridCapacity.Rows.Add(신규 문자열[] t, 용량[t].ToString() );
69 foreach (문자열tin수요.키)
70this.dataGridDemand.Rows.Add(신규 문자열[] t, 수요[t].ToString() );
71this.dataGridPhi.Rows.Add(신규 문자열[] phiMin.ToString(), phiMax.ToString(), phiSteps.ToString() );
72}
73
74 비공개 공허button1_Click(객체발신자, EventArgs e)
75{
76this.dataGridView1.Rows.Clear();
77this.chart1.Series.Clear();
78this.chart1.ResetAutoValues();
79this.chart1.Visible =;
80this.chart1.Series.Add("비용");
81
82this.resultX =신규사전<string, List<Tuple<string, string, double>>>();
83
85
86 // 사용자 입력에서 데이터 가져오기
87 슬롯 게임데이터베이스데이터 = ws.AddDatabase("데이터");
88
89 슬롯 게임매개변수d = 데이터.매개변수 추가("d", 2,"수천 마일 단위의 거리");
90 foreach(DataGridViewRow 행this.dataGridDistance.Rows)
91d.AddRecord(row.Cells[0].Value.ToString(), row.Cells[1].Value.ToString()).= Convert.ToDouble(row.Cells[2].Value);
92
93 GAMSSeti = 데이터.AddSet("나", 1,"통조림 공장");
94 슬롯 게임매개변수a = data.AddParameter("a", 1,"케이스에 있는 식물 i의 용량");
95 for (intidx = 0; idx < this.dataGridCapacity.Rows.Count - 1; idx++)
96{
97i.AddRecord(this.dataGridCapacity.Rows[idx].Cells[0].Value.ToString());
98a.AddRecord(this.dataGridCapacity.Rows[idx].Cells[0].Value.ToString()).= Convert.ToDouble(this.dataGridCapacity.Rows[idx].Cells[1].Value);
99}
100
101 GAMSSetj = 데이터.AddSet("j", 1,"시장");
102 슬롯 게임매개변수b = data.AddParameter("b", 1,"경우에 따라 시장 j의 수요");
103 (intidx = 0; idx < this.dataGridDemand.Rows.Count - 1; idx++)
104{
105j.AddRecord(this.dataGridDemand.Rows[idx].Cells[0].Value.ToString());
106b.AddRecord(this.dataGridDemand.Rows[idx].Cells[0].Value.ToString()).= Convert.ToDouble(this.dataGridDemand.Rows[idx].Cells[1].Value);
107}
108
109 // GAMSJob을 실행하여 GAMSCheckpoint 초기화
110 슬롯 게임옵션opt = ws.AddOptions();
111opt.AllModelTypes ="conopt";
112 GAMSJobt7 = ws.AddJobFromString(GetModelText());
113 슬롯 게임체크포인트cp = ws.AddCheckpoint();
114t7.실행(선택, CP, 데이터);
115
116 // GAMSModelInstance를 생성하고 다양한 스칼라 파이를 사용하여 여러 번 해결
118
119 슬롯 게임매개변수파이 = 마일.SyncDB.매개변수 추가("파이", 0,"수요 및 비용 탄력성 요인");
120
121 // GAMSModelInstance를 인스턴스화하고 모델 정의 및 GAMSModifier를 전달하여 phi 변경 가능 선언
122mi.인스턴스화("nlp min z를 수송해 주세요", 선택,신규 GAMSModifier(파이));
123
124파이.AddRecord();
125목록<더블> 필리스트 =신규목록<더블>();
126 더블v = Convert.ToDouble(this.dataGridPhi.Rows[0].Cells[0].Value);//피민
127 할 것
128{
129philist.Add(v);
130v += Convert.ToDouble(this.dataGridPhi.Rows[0].Cells[2].Value);// v+= phiSteps
131}그동안(v < Convert.ToDouble(이것.dataGridPhi.Rows[0].Cells[1].Value) + 1e-10);// v <= phiMax
132
133 foreach (더블파이값in필리스트)
134{
135phi.FirstRecord().Value = phiValue;
136mi.Solve();
137 더블obj = mi.SyncDB.GetVariable("z").FindRecord().레벨;
138 문자열[] 행 =신규 문자열[] phiValue.ToString("0.00"), mi.ModelStatus.ToString(), mi.SolveStatus.ToString(), obj.ToString("0.00") };
139this.dataGridView1.Rows.Add(행);
140
141목록<Tuple<String,String, double>> l =신규목록<Tuple<String,String, double>>();
142 foreach(GAMSVariableRecordrecinmi.SyncDB.GetVariable("x"))
143l.추가(신규튜플<문자열, 문자열, 더블>(rec.Key(0),rec.Key(1),rec.레벨));
144
145this.resultX.Add(phiValue.ToString("0.00"), l);
146
147 if(mi.ModelStatus ==ModelStat.OptimalGlobal || mi.ModelStatus ==ModelStat.OptimalLocal)
148{
149this.chart1.Series["비용"].Points.AddXY(phiValue, obj);
150this.chart1.Update();
151}
152}
153this.updateResultX();
154}
155
156 비공개 무효button2_Click(객체발신자, EventArgs e)
157{
158OpenFileDialog 브라우저 =신규OpenFileDialog();
159
160browser.DefaultExt ="accdb";
161browser.Filter ="액세스 데이터베이스(*.accdb)|*.accdb";
162browser.InitialDirectory = 환경.CurrentDirectory;
163
164 if(browser.ShowDialog() == DialogResult.OK)
165{
166 // 액세스 데이터베이스에서 읽기
167OleDbConnection 연결 =;
168 시도해 보세요
169{
170연결 =신규OleDbConnection("공급자=Microsoft.ACE.OLEDB.12.0;데이터 소스="+ 브라우저.파일 이름);
171
172 //읽기 거리
173this.dataGridDistance.Rows.Clear();
174OleDbCommand cmd =신규OleDb명령("공장, 시장, 거리 FROM 거리 선택", 연결);
175연결.열기();
176OleDbDataReader 리더 = cmd.ExecuteReader();
177 그동안(reader.Read())
178this.dataGridDistance.Rows.Add(신규 문자열[] reader.GetString(0), reader.GetString(1), reader.GetValue(2).ToString() );
179
180 // 읽기 용량
181this.dataGridCapacity.Rows.Clear();
182cmd =신규OleDb명령("공장 선택, 공장에서 용량", 연결);
183reader = cmd.ExecuteReader();
184 그동안(reader.Read())
185this.dataGridCapacity.Rows.Add(신규 문자열[] reader.GetString(0), reader.GetValue(1).ToString() );
186
187 // 읽기 수요
188this.dataGridDemand.Rows.Clear();
189cmd =신규OleDb명령("시장 선택, 시장 수요", 연결);
190reader = cmd.ExecuteReader();
191 그동안(reader.Read())
192this.dataGridDemand.Rows.Add(신규 문자열[] reader.GetString(0), reader.GetValue(1).ToString() );
193연결.닫기();
194}
195 잡기(예외 예)
196{
197MessageBox.Show("데이터베이스에서 데이터를 읽는 동안 오류가 발생했습니다. \n"+ 예: 메시지);
198연결.닫기();
199환경.종료(1);
200}
201}
202}
203
204 비공개 무효dgvCellBeginEdit(객체발신자, DataGridViewCellCancelEventArgs e)
205{
206((DataGridView)발신자).Tag = ((DataGridView)발신자).Rows[e.RowIndex].Cells[e.ColumnIndex].Value;
207}
208
209 비공개 무효dgvCellEndEdit(객체발신자, DataGridViewCellEventArgs e)
210{
211DataGridView dgv = ((DataGridView)발신자);
212 객체값 = dgv.Rows[e.RowIndex].Cells[e.ColumnIndex].Value;
213
214 // 세트 요소가 추가 또는 변경되었습니다.
215 if(e.ColumnIndex == 0)
216{
217 intcolIdx;
218 if(dgv.Equals(이것.dataGridCapacity))
219colIdx = 0;
220 그밖에
221colIdx = 1;
222
223 // 새로운 행이 추가되었습니다
224 if((dgv.Tag ==|| dgv.Tag.Equals(String.Empty)) && 값 !=&& !value.Equals(String.Empty))
225{
226 // 수용 인원을 늘렸습니다
227 if(colIdx == 0)
228 for (inti = 0; i < this.dataGridDemand.Rows.Count - 1; 나++)
229this.dataGridDistance.Rows.Add(값,이것.dataGridDemand.Rows[i].Cells[0].Value);
230 // 수요에 추가했습니다
231 그밖에
232 for (inti = 0; i < this.dataGridCapacity.Rows.Count - 1; 나++)
233this.dataGridDistance.Rows.Add(이것.dataGridCapacity.Rows[i].Cells[0].값, 값);
234}
235
236 // 이미 존재하는 세트 요소를 변경했습니다.
237 그밖에
238{
239 foreach(DataGridViewRow rinthis.dataGridDistance.Rows)
240 if(r.Cells[colIdx].Value.Equals(dgv.Tag))
241r.Cells[colIdx].Value = dgv.Rows[e.RowIndex].Cells[e.ColumnIndex].Value;
242}
243}
244}
245
246 비공개 공허dgvSelectionChanged(객체발신자, EventArgs e)
247{
248 if(((DataGridView)sender).SelectedRows.Count != 0)
249((DataGridView)발신자).Tag = ((DataGridView)발신자).SelectedRows[0].Cells[0].Value;
250}
251
252 비공개 공허dgvRows제거됨(객체발신자, DataGridViewRowEventArgs e)
253{
254DataGridView dgv = ((DataGridView)발신자);
255 intcolIdx;
256 if(dgv.Equals(이것.dataGridCapacity))
257colIdx = 0;
258 그밖에
259colIdx = 1;
260 (inti = this.dataGridDistance.RowCount - 1; 나는 >= 0; 나--)
261{
262DataGridViewRow r = this.dataGridDistance.Rows[i];
263 if(r.Cells[colIdx].Value.Equals(dgv.Tag))
264this.dataGridDistance.Rows.Remove(r);
265}
266}
267
268 비공개 무효updateResultX()
269{
270this.dataGridViewX.Rows.Clear();
271 문자열selectedPhi = this.dataGridView1.SelectedRows[0].Cells[0].Value.ToString();
272 foreach(튜플<문자열, 문자열, 더블> 행this.resultX[selectedPhi])
273this.dataGridViewX.Rows.Add(row.Item1, row.Item2, row.Item3.ToString("0.00"));
274}
275
276 비공개 무효dataGridView1_CellClick(객체발신자, DataGridViewCellEventArgs e)
277{
278this.updateResultX();
279}
280
281
282 정적문자열 GetModelText()
283{
284문자열 모델 =@"
285세트
286나는 통조림 공장
287j 시장;
288
289매개변수
290
291a(i) 경우에 따라 공장 i의 용량
292
293b(j) 경우에 따라 시장 j의 수요
294
295d(i,j) 수천 마일 단위의 거리;
296
297$gdxin 데이터
298$load i j a b d
299
300
301스칼라 f 운임(1,000마일당 케이스당 달러) /90/ ;
302스칼라 파이 수요 및 비용 탄력성 계수 /1/;
303
304매개변수 c(i,j) 운송 비용(케이스당 수천 달러) ;
305
306c(i,j) = f * d(i,j) / 1000 ;
307
308변수
309x(i,j) 케이스의 배송 수량
310z 총 운송 비용(수천 달러) ;
311
312양수 변수 x ;
313
314수식
315비용 정의 목적 함수
316공급(i) 공장 i의 공급 제한을 준수합니다.
317수요(j)는 시장 j의 수요를 충족합니다. ;
318
319비용 .. z =e= sum((i,j), c(i,j)*x(i,j)**phi) ;
320
321공급(i) .. 합계(j, x(i,j)) =l= a(i) ;
322
323수요(j) .. sum(i, x(i,j)) =g= sqr(1-phi)*b(j) ;
324
325모델 수송 /all/ ;
326";
327
328 반환모델;
329}
330}
331}
GAMSModelInstance AddModelInstance(string modelInstanceName=null)
GAMSParameter AddParameter(문자열 식별자, 정수 차원, 문자열 설명텍스트="")
void Run(GAMSOptions gamsOptions=null, GAMSCheckpoint 체크포인트=null, TextWriter 출력=null, Boolean createOutDB=true)
슬롯 게임데이터베이스 SyncDB
void Instantiate(string modelDefinition, params GAMSModifier[] modifiers)
새 GAMSParameterRecord AddRecord(params 문자열[] 키)
새 GAMSSetRecord AddRecord(params 문자열[] 키)
이 예에서는 일련의 운송 문제가 GAMSModelInstance를 사용하여 해결되었습니다....