로드 중...
검색 중...
일치하는 항목 없음
domain_check.m
1함수domain_check(varargin)
2
3% 인수에서 작업공간 정보 확인
4 if나긴 > 0
5wsInfo = gams.control.WorkspaceInfo();
6wsInfo.systemDirectory = varargin1;
7ws = gams.control.Workspace(wsInfo);
8 그밖에
9ws = gams.control.Workspace();
10
11
12% 입력 데이터 준비
13식물 ='시애틀', '샌디에고'};
14시장 ='뉴욕', '시카고', '토피카'};
15용량 = [350, 600];
16수요 = [325, 300, 275];
17거리 = [2.5, 1.7, 1.8; 2.5, 1.8, 1.4];
18
19% 위의 데이터로 데이터베이스를 준비
20db = ws.addDatabase();
21
22% 데이터베이스에 두 세트 추가
23i = db.addSet('나', 1,'통조림 공장');
24 fork = 1:numel(식물)
25i.addRecord(식물k);
26
27j = db.addSet('j', 1,'시장');
28 fork = 1:numel(시장)
29j.addRecord(시장k);
30
31
32% 무료 슬롯 사이트 정보가 포함된 매개변수 추가
33a = db.addParameter('a', '경우에 따라 식물 i의 용량', i);
34 fork = 1:numel(식물)
35rec = a.addRecord(식물k);
36rec.value = 용량(k);
37
38 % if무료 슬롯 사이트 위반, 뭔가 잘못되었음을 확인함
39 if~a.checkDomains()
40오류('예기치 않은 무료 슬롯 사이트 위반');
41
42
43% 완화된 무료 슬롯 사이트 정보로 매개변수 추가
44b = db.addParameter('b', '경우에 따라 시장 j의 수요', 'j');
45 fork = 1:numel(시장)
46rec = b.addRecord(시장k);
47rec.value = 수요(k);
48
49 if~b.checkDomains()
50오류('b에서 예상치 못한 무료 슬롯 사이트 위반');
51
52
53% 무료 슬롯 사이트 정보가 포함된 2차원 매개변수 추가
54무료 슬롯 사이트 = i, j;
55d = db.addParameter('d', '수천 마일 단위의 거리', 무료 슬롯 사이트);
56 fork1 = 1:numel(식물)
57 fork2 = 1:numel(시장)
58키 = 식물k1, 시장k2;
59rec = d.addRecord(keys);
60rec.value = 거리(k1,k2);
61
62
63 if~d.checkDomains()
64오류('d에서 예상치 못한 무료 슬롯 사이트 위반');
65
66
67 if~db.checkDomains()
68오류('DB에서 예기치 않은 무료 슬롯 사이트 위반');
69
70
71% 일부 생성'틀렸어요'항목
72rec = d.addRecord('시애틀', '아아'});
73rec.값 = 1;
74rec = d.addRecord('bb', '시애틀'});
75rec.value = 1;
76
77rec = a.addRecord('아아');
78rec.값 = 1;
79rec = a.addRecord('bb');
80rec.value = 1;
81rec = b.addRecord('아아');
82rec.value = 1;
83rec = b.addRecord('bb');
84rec.값 = 1;
85
86% 이제 데이터베이스와 기호 a 및 d에 무료 슬롯 사이트 위반이 있어야 합니다.
87 ifdb.checkDomains()
88오류('DB에 대한 무료 슬롯 사이트 위반이 인식되지 않음');
89
90 ifa.checkDomains()
91오류('인식되지 않는 무료 슬롯 사이트 위반');
92
93 ifd.checkDomains()
94오류('d에 대한 무료 슬롯 사이트 위반이 인식되지 않음');
95
96
97% b는 반면에 완화된 무료 슬롯 사이트 정보로만 정의되었으므로 무료 슬롯 사이트 위반이 표시되어서는 안 됩니다.
98 if~b.checkDomains()
99오류('b에서 예상치 못한 무료 슬롯 사이트 위반');
100
101
102 % fora, 2개의 무료 슬롯 사이트 위반이 표시됩니다('아아'그리고'bb')
103fprintf('다음의 기호 무료 슬롯 사이트 위반:\n');
104dvCnt = list_domain_violations('', a.getSymbolDomainViolations(0), 0);
105 ifdvCnt ~= 2
106오류('a의 2개의 무료 슬롯 사이트 위반 기록이 예상되었으나 [%d]이(가) 발견되었습니다.', dvCnt);
107
108
109 % ford, 3개의 무료 슬롯 사이트 위반이 표시됩니다('시애틀', *'아아'*; *'bb'*, *'시애틀'*)
110fprintf('d:\n의 심볼 무료 슬롯 사이트 위반');
111dvCnt = list_domain_violations('', d.getSymbolDomainViolations(0), 0);
112 ifdvCnt ~= 3
113오류('d의 3개 무료 슬롯 사이트 위반 기록이 예상되었으나 [%d]이(가) 발견되었습니다.', dvCnt);
114
115
116 % fordb, 5개의 무료 슬롯 사이트 위반이 표시되어야 합니다(a와 d의 모든 위반)
117dvCnt = 0;
118fprintf('최대 레코드 수 제한이 없는 db의 데이터베이스 무료 슬롯 사이트 위반:\n');
119dbDomViolations = db.getDatabaseDomainViolations(0,0);
120 fori = 1:numel(dbDomViolations)
121이름 = dbDomViolationsi.symbol.name;
122dvCnt = list_domain_violations(name, dbDomViolationsi.symbolDomainViolations, dvCnt);
123
124 ifdvCnt ~= 5
125오류('DB의 5개 무료 슬롯 사이트 위반 기록이 예상되었으나 [%d]이(가) 발견되었습니다.', dvCnt);
126
127
128% 이제 보고된 위반 기록의 양을 총 3개로 제한합니다.
129dvCnt = 0;
130fprintf('3개 이하의 위반 기록이 있는 db의 데이터베이스 무료 슬롯 사이트 위반:\n');
131dbDomViolations = db.getDatabaseDomainViolations(3,0);
132 fori = 1:numel(dbDomViolations)
133name = dbDomViolationsi.symbol.name;
134dvCnt = list_domain_violations(name, dbDomViolationsi.symbolDomainViolations, dvCnt);
135
136 ifdvCnt ~= 3
137오류('DB의 3개 무료 슬롯 사이트 위반 기록이 예상되었으나 [%d]이(가) 발견되었습니다.', dvCnt);
138
139
140% 이제 보고된 위반 기록의 양을 기호당 1개로 제한합니다.
141dvCnt = 0;
142fprintf('1 기호당 1개 이하의 위반 기록이 있는 db의 데이터베이스 무료 슬롯 사이트 위반:\n');
143dbDomViolations = db.getDatabaseDomainViolations(0,1);
144 i = 1:numel(dbDomViolations)
145name = dbDomViolationsi.symbol.name;
146dvCnt = list_domain_violations(name, dbDomViolationsi.symbolDomainViolations, dvCnt);
147
148 ifdvCnt ~= 2
149오류('DB의 2개 무료 슬롯 사이트 위반 기록이 예상되었으나 [%d]이(가) 발견되었습니다.', dvCnt);
150
151
152% 기준기본값우리는 해야 한다얻기무료 슬롯 사이트 위반이 있는 데이터베이스를 내보낼 때의 예외
153sawException =거짓;
154 시도
155db.export('test.gdx');
156 잡기
157sawException =;
158db.suppressAutoDomainChecking =;
159db.export('test.gdx');
160
161 if~sawException
162오류('기본적으로 무료 슬롯 사이트 위반이 포함된 데이터베이스를 내보낼 수 없어야 합니다.');
163
164
165% gdx에서 무료 슬롯 사이트 정보가 포함된 매개변수 읽기
166db2 = ws.addDatabaseFromGDX('test.gdx');
167d2 = db2.getParameter('d');
168
169% 매개변수의 무료 슬롯 사이트은 Set i 및 Set j여야 합니다.
170무료 슬롯 사이트 = d2.domains;
171 fori = 1:numel(무료 슬롯 사이트)
172 if~isa(무료 슬롯 사이트i,'gams.control.Set')
173오류('무료 슬롯 사이트으로 설정될 것으로 예상되었으나 완화된 무료 슬롯 사이트 %s을(를) 찾았습니다.', 항목);
174
175 ifstrcmp(무료 슬롯 사이트i.이름,'나')
176 if~check_uel(무료 슬롯 사이트i, 식물)
177오류('무료 슬롯 사이트 i에서 예상치 못한 uel이 발견되었습니다.');
178
179elseif strcmp(무료 슬롯 사이트i.이름,'j')
180 if~check_uel(무료 슬롯 사이트i, 시장)
181오류('무료 슬롯 사이트 j에서 예상치 못한 uel이 발견되었습니다');
182
183 그밖에
184오류('i와 j 세트가 필요했지만 %s를 찾았습니다.', 무료 슬롯 사이트i.name);
185
186
187
188 % *************************************************************** %
189% 이 다음 섹션은 실제로 무료 슬롯 사이트 확인에 관한 것이 아니지만 %
190% 특정 작업이 예상대로 작동하는지 확인하세요. %
191 % *************************************************************** %
192
193aliasData =
194 '세트'
195 ' 나는 통조림 공장 / 시애틀, 샌디에고 /; '
196 ' '
197 '별칭 (i,ii); '};
198aliasData = 스프린트f('%s\n', aliasData:);
199
200% 별칭을 세트로 읽어보세요
201aliasJob = ws.addJobFromString(aliasData);
202aliasJob.run();
203ii = aliasJob.outDB.getSet('ii');
204fprintf('별칭 집합의 요소:');
205 forrec = ii.records
206fprintf(' > %s\n', Rec1.key(1));
207
208
209testDB = ws.addDatabase();
210testSet = testDB.addSet('테스트', 1);
211
212% 빈 UEL을 추가해 보세요
213testSet.addRecord('');
214fprintf('빈 UEL을 추가한 후 테스트 세트의 요소:\n');
215fprintf(' > %d\n', testSet.numberOfRecords);
216
217% GAMS 스트립 보류 중인 공백그동안선행 공백이 관련됨
218rec = testSet.addRecord(' ');
219rec.text ='a';
220fprintf('기록'' '' '와 같아야 합니다.' 아'':\n');
221fprintf(' > %s\n', testSet.findRecord(' 아').text);
222
223% GAMS는 63자를 초과하는 UEL을 처리할 수 없습니다.
224% 괜찮을 것 같습니다 ...
225rec = testSet.addRecord('123456789012345678901234567890123456789012345678901234567890123 ');
226rec.text ='알았어';
227% ... 하지만 아님이것
228 시도해 보세요
229error_thrown =;
230rec = testSet.addRecord('1234567890123456789012345678901234567890123456789012345678901234');
231rec.text ='괜찮지 않음';
232error_thrown =거짓;
233 잡기
234
235 if~error_thrown
236오류('63자를 초과하는 레코드를 추가하는 것은 불가능해야 합니다.');
237
238
239% GAMS는 255자를 초과하는 설명 텍스트를 처리할 수 없습니다.
240testDB.addSet('텍스트 확인', '123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345');
241 시도해 보세요
242error_thrown =사실;
243testDB.addSet('textNotOK', '1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456');
244error_thrown =거짓;
245 잡기
246
247 if~error_thrown
248오류('255자를 초과하는 설명 텍스트를 추가하는 것은 불가능해야 합니다.');
249
250
251rec = testSet.addRecord('알았어');
252rec.text ='123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345';
253 시도해 보세요
254error_thrown =;
255rec = testSet.addRecord('안돼');
256rec.text ='1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456';
257error_thrown =거짓;
258 잡기
259
260 if~error_thrown
261오류('255자를 초과하는 설명 텍스트를 추가하는 것은 불가능해야 합니다.');
262
263
264% GAMS는 단일 및 포함된 UEL을 처리할 수 있습니다.더블인용하지만 동시에는 아님
265testSet.addRecord('인용문''');
266testSet.addRecord('인용문"');
267 시도해 보세요
268error_thrown =사실;
269testSet.addRecord('인용문''"');
270error_thrown =거짓;
271 잡기
272
273 if~error_thrown
274오류('기록에 작은따옴표와 큰따옴표를 추가하는 것은 불가능해야 합니다.');
275
276
277testDB.export('test.gdx');
278
279fprintf('성공적으로 종료되었습니다!\n');
280
281
282
283함수dvCnt = list_domain_violations(symbolName, domViolations, dvCnt)
284 forj = 1:numel(domViolations)
285fprintf(' > %s [', 기호 이름);
286item1 = domViolationsj.violationArray;
287 fork = 1:numel(item1)
288 if항목1(k)
289fprintf('사실입니다');
290dvCnt = dvCnt + 1;
291 그밖에
292fprintf('거짓');
293
294
295fprintf('] <> ');
296item2 = domViolationsj.record.keys;
297 fork = 1:numel(item2)
298fprintf('%s ', 항목2k);
299
300fprintf('<<\n');
301
302
303
304함수ret = check_uel(기호, uels)
305ret =;
306 forrec = 기호.레코드
307키 = Rec1.key(1);
308is_contained =거짓;
309 fori = 1:numel(uels)
310 ifstrcmp(키, uelsi)
311is_contained =;
312 휴식;
313
314
315 if~is_contained
316ret =거짓;
317 반환
318
319
320 반환
321