로드 중...
검색 중...
일치하는 항목 없음
Transport10.cs
1사용 중시스템;
2사용 중System.Collections.Generic;
3사용 중System.Linq;
4사용 중시스템.텍스트;
5사용 중엑셀 = Microsoft.Office.Interop.Excel;
7사용 중시스템.진단;
8사용 중시스템.IO;
9
10
11네임스페이스TransportSeq
12{
21 클래스운송10
22{
23 정적 무효메인(문자열[] 인수)
24{
26 if(Environment.GetCommandLineArgs().Length > 1)
27ws =신규 무료 슬롯 사이트작업공간(systemDirectory: Environment.GetCommandLineArgs()[1]);
28 그밖에
30
31 // 통합 문서에서 입력 데이터 읽기
32var excelApp =신규Excel.Application();
33Excel.Workbook wb = excelApp.Workbooks.Open(Path.Combine(ws.시스템 디렉터리, @"apifiles/Data/transport.xlsx"));
34
35Excel.Range 범위;
36
37Excel.Worksheet 용량 = (Excel.Worksheet)wb.Worksheets.get_Item("용량");
38범위 = 용량.UsedRange;
39배열 용량데이터 = (배열)범위.셀.값;
40 intiCount = 용량.UsedRange.Columns.Count;
41
42Excel.Worksheet 수요 = (Excel.Worksheet)wb.Worksheets.get_Item("수요");
43범위 = 수요.UsedRange;
44어레이 수요데이터 = (어레이)범위.셀.값;
45 intjCount = 범위.열.수;
46
47Excel.Worksheet 거리 = (Excel.Worksheet)wb.Worksheets.get_Item("거리");
48범위 = 거리.UsedRange;
49배열 distanceData = (Array)range.Cells.Value;
50
51 // 시장/공장 수는 모든 스프레드시트에서 동일해야 합니다
52Debug.Assert((range.Columns.Count - 1) == jCount && (range.Rows.Count - 1) == iCount,
53 "스프레드시트의 크기가 일치하지 않습니다");
54wb.Close();
55
56 // GAMSDatabase 생성 및 통합 문서 데이터 채우기
58
59 GAMSSeti = DB.AddSet("나", 1,"식물");
60 GAMSSetj = db.AddSet("j", 1,"시장");
61 무료 슬롯 사이트매개변수capacityParam = db.매개변수 추가("a", "용량", i);
62 무료 슬롯 사이트매개변수demandParam = db.매개변수 추가("b", "수요", j);
63 무료 슬롯 사이트매개변수distanceParam = db.매개변수 추가("d", "거리", i, j);
64
65 for (intic = 1; ic <= iCount; IC++)
66{
67i.AddRecord((문자열)capacityData.GetValue(1, ic));
68capacityParam.AddRecord((문자열)capacityData.GetValue(1, ic)).= (double)capacityData.GetValue(2, ic);
69}
70 for (intjc = 1; jc <= jCount; jc++)
71{
72j.AddRecord((문자열)demandData.GetValue(1, jc));
73demandParam.AddRecord((문자열)demandData.GetValue(1, jc)).= (double)demandData.GetValue(2, jc);
74 for (intic = 1; ic <= iCount; IC++)
75{
76distanceParam.AddRecord((문자열)distanceData.GetValue(ic + 1, 1), (문자열)distanceData.GetValue(1, jc + 1)).= (이중)distanceData.GetValue(ic + 1, jc + 1);
77}
78}
79
80 // GAMSJob 생성 및 실행
81 사용 중 (무료 슬롯 사이트옵션opt = ws.추가옵션())
82{
83 GAMSJobt10 = ws.AddJobFromString(GetModelText());
84선택.정의.추가("gdxincname", DB.이름);
85opt.AllModelTypes ="익스프레스";
86t10.실행(선택, DB);
87 foreach (GAMSVariableRecordrect10.OutDB.GetVariable("x"))
88Console.WriteLine("x("+ Rec.Key(0) +","+ Rec.Key(1) +"): 레벨="+ 추천레벨 + " 한계="+ 추천한계);
89}
90}
91
92 정적문자열 GetModelText()
93{
94문자열 모델 =@"
95세트
96나는 통조림 공장
97j 시장
98
99매개변수
100a(i) 경우에 따라 공장 i의 용량
101b(j) 경우에 따라 시장 j의 수요
102d(i,j) 거리(천 마일)
103천 마일당 케이스당 달러 단위의 스칼라 f 화물 /90/;
104
105$if 설정되지 않음 gdxincname $abort '제공된 데이터 파일에 대한 포함 파일 이름 없음'
106$gdxin %gdxincname%
107$load i j a b d
108$gdxin
109
110매개변수 c(i,j) 운송 비용(케이스당 수천 달러) ;
111
112c(i,j) = f * d(i,j) / 1000 ;
113
114변수
115x(i,j) 케이스의 배송 수량
116z 총 운송 비용(수천 달러) ;
117
118양수 변수 x ;
119
120수식
121비용 정의 목적 함수
122공급(i) 공장 i의 공급 제한을 준수
123수요(j)는 시장 j의 수요를 충족합니다. ;
124
125비용 .. z =e= sum((i,j), c(i,j)*x(i,j)) ;
126
127공급(i) .. 합계(j, x(i,j)) =l= a(i) ;
128
129수요(j) .. 합계(i, x(i,j)) =g= b(j) ;
130
131모델 전송 /all/ ;
132
133z를 최소화하는 lp를 사용하여 전송을 해결합니다.
134
135x.l, x.m 표시 ;
136";
137
138 반환모델;
139}
140}
141}
GAMSSet AddSet(문자열 식별자, int 차원, 문자열 설명Text="", SetType setType=SetType.multi)
GAMSParameter AddParameter(문자열 식별자, 정수 차원, 문자열 설명텍스트="")
void Run(GAMSOptions gamsOptions=null, GAMSCheckpoint 체크포인트=null, TextWriter 출력=null, Boolean createOutDB=true)
새 GAMSParameterRecord AddRecord(params 문자열[] 키)
새 GAMSSetRecord AddRecord(params 문자열[] 키)
GAMSJob AddJobFromString(문자열 gamsSource, GAMSCheckpoint 체크포인트=null, 문자열 jobName=null)
GAMSDatabase AddDatabase(문자열 데이터베이스 이름=null, 문자열 inModelName=null)
GAMSOptions AddOptions(GAMSOptions optFrom=null)
이것은 일련의 튜토리얼 예제 중 10번째 모델입니다. 여기서는 다음을 보여줍니다. GAMSDatabase를 채우는 방법 ...