Диссертация (1149954), страница 33
Текст из файла (страница 33)
Ïðè ýòîì äîñòèãàåòñÿ ïîëåçíîñòü, ðàâíàÿ ïðèìåðíî1.7778.Íàéäåì òåïåðü êîìïðîìèññíîå ðåøåíèå ìåòîäîì ëèíåéíîãî ïðîãðàììèðîâàíèÿ. åçóëüòàòòàêîâ:x1 = (1, 1.9862, 3.9724, 7.9449, 15.8898, 15.8898, 31.7795, 31.7795, 63.5590, 63.5590,127.1180, 127.1180, 254.2360, 254.2360, 254.2360)x2 = (1, 1, 1, 1, 1, 0.0069, 0.0069, 0, 0, 0, 0, 0, 0, 0, 0.0138)Êîìïðîìèññíîå îòêëîíåíèå îò îïòèìàëüíîãî âûèãðûøà ñîñòàâëÿåò1.7640.
Äëÿ òÿæåëîé ïðî-ìûøëåííîñòè ýòî íåçíà÷èòåëüíîå çàìåäëåíèå ðàçâèòèÿ, à ëåãêàÿ ïðîìûøëåííîñòü â òàêîìêîìïðîìèññíîì ñëó÷àå ðàçâèâàåò ýåêòèâíîñòü, ðàâíóþ ëèøü îêîëî8%îïòèìàëüíîé.Òåêñò ïðîãðàììû äëÿ ïîäñ÷åòà êîìïðîìèññíîãî ïëàíàÏðîãðàììà äëÿ ïîäñ÷åòà êîìïðîìèññíîãî ïëàíà íàïèñàíà íà ÿçûêå MatLab. Åå èñõîäíûéòåêñò:funtion testmoments = [0, 23, 46, 69, 92, 100, 115, 123, 138, 146, 161, 169,184, 192, 200℄;lmodel = LeontievModelDiffTime(2,moments, [23, 100℄, [0.5 1; 0 0.5℄)bigx11 = zeros(15, 15);bigx11(findMoment(lmodel, 0), findMoment(lmodel, 23)) = 0.5;bigx11(findMoment(lmodel, 23), findMoment(lmodel, 46)) = 0.5;158bigx11(findMoment(lmodel, 46), findMoment(lmodel, 69)) = 0.5;bigx11(findMoment(lmodel, 69), findMoment(lmodel, 92)) = 0.5;bigx11(findMoment(lmodel, 92), findMoment(lmodel, 115)) = 0.5;bigx11(findMoment(lmodel, 115), findMoment(lmodel, 138)) = 0.5;bigx11(findMoment(lmodel, 138), findMoment(lmodel, 161)) = 0.5;bigx11(findMoment(lmodel, 161), findMoment(lmodel, 184)) = 0.5;bigx12 = zeros(15, 15);bigx12(findMoment(lmodel, 0), findMoment(lmodel, 100)) = 1;bigx12(findMoment(lmodel, 23), findMoment(lmodel, 123)) = 1;bigx12(findMoment(lmodel, 46), findMoment(lmodel, 146)) = 1;bigx12(findMoment(lmodel, 69), findMoment(lmodel, 169)) = 1;bigx12(findMoment(lmodel, 92), findMoment(lmodel, 192)) = 1;bigx12(findMoment(lmodel, 100), findMoment(lmodel, 200)) = 1;bigx21 = zeros(15, 15);bigx22 = zeros(15, 15);bigx22(findMoment(lmodel, 0), findMoment(lmodel, 100)) = 0.5;bigx22(findMoment(lmodel, 23), findMoment(lmodel, 123)) = 0.5;bigx22(findMoment(lmodel, 46), findMoment(lmodel, 146)) = 0.5;bigx22(findMoment(lmodel, 69), findMoment(lmodel, 169)) = 0.5;bigx22(findMoment(lmodel, 92), findMoment(lmodel, 192)) = 0.5;bigx22(findMoment(lmodel, 100), findMoment(lmodel, 200)) = 0.5;bigmatrix = [bigx11 bigx12; bigx21 bigx22℄lmodel = addSaving(lmodel, 1, findMoment(lmodel, 100));lmodel = addSaving(lmodel, 1, findMoment(lmodel, 123));lmodel = addSaving(lmodel, 1, findMoment(lmodel, 146));lmodel = addSaving(lmodel, 1, findMoment(lmodel, 169));lmodel = addSaving(lmodel, 1, findMoment(lmodel, 192));lmodel = addSaving(lmodel, 1, findMoment(lmodel, 200));159lmodel = addSaving(lmodel, 2, findMoment(lmodel, 23));lmodel = addSaving(lmodel, 2, findMoment(lmodel, 46));lmodel = addSaving(lmodel, 2, findMoment(lmodel, 69));lmodel = addSaving(lmodel, 2, findMoment(lmodel, 92));lmodel = addSaving(lmodel, 2, findMoment(lmodel, 115));lmodel = addSaving(lmodel, 2, findMoment(lmodel, 138));lmodel = addSaving(lmodel, 2, findMoment(lmodel, 161));lmodel = addSaving(lmodel, 2, findMoment(lmodel, 184));lmodel = addIntegralCriteria(lmodel, bigmatrix, {d1, d2})[x, fval℄ = getOptimalPlan(lmodel, [1 1℄, bigmatrix, 1) % ìàêñèìèçèðóåì 1-þïðîäóêöèþ[x, fval℄ = getOptimalPlan(lmodel, [1 1℄, bigmatrix, 2) % ìàêñèìèçèðóåì 2-þïðîäóêöèþ[x, fval℄ = getCompromisePlan(lmodel, [1 1℄, bigmatrix) % íàõîäèì êîìïðîìèññíîåðåøåíèå%________________________________________________________________________________% Ôóíêöèè äèñêîíòà:funtion y = d1(t)y = (0.5).^t;funtion y = d2(t)y = (0.8).^t;%________________________________________________________________________________% Èíèöèàëèçàöèÿ ìîäåëè:funtion self = LeontievModelDiffTime(nvars, moments, periods,matrix)% Ìîäåëü Ëåîíòüåâà ñ ðàçëè÷íûìè ïåðèîäàìè âðåìåíè ïðîèçâîäñòâà.% nvars - êîëè÷åñòâî ïåðåìåííûõ (îòðàñëåé) x_1, \dots x_{nvars}% moments - ïîñëåäîâàòåëüíîñòü ìîìåíòîâ âðåìåíè, â êîòîðûå ïðîèñõîäèò160% ïðîèçâîäñòâî% periods - âåêòîð ïåðèîäîâ ïðîèçâîäñòâà â îòðàñëÿõ% matrix - êâàäðàòíàÿ ìàòðèöà, êàæäàÿ ñòðîêà êîòîðîé îïèñûâàåò% ïðîèçâîäñòâåííûå ïîòðåáíîñòè êàæäîé îòðàñëè% self.savings - óñëîâèÿ ñîõðàíåíèÿ, ïîêàçûâàþùèå, ÷òî íåêîòîðûå ïåðåìåííûå% íå ìîãóò ìåíÿòüñÿ â îïðåäåëåííûå ìîìåíòû âðåìåíè% self.riteria - âåêòîðà êðèòåðèåâ îïòèìàëüíîñòèself.nvars = nvars;self.moments = moments;self.periods = periods;self.matrix = matrix;[i, N℄ = size(moments);self.savings = zeros(0, nvars*N);self.riteria = zeros(0, nvars*N);self = lass(self, 'LeontievModelDiffTime');%________________________________________________________________________________% Íàõîæäåíèå íîìåðà ìîìåíòà âðåìåíè:funtion num = findMoment(self, moment)% îïðåäåëÿåò íîìåð îòðåçêà, íà êîòîðîì íàõîäèòñÿ äàííûé ìîìåíò âðåìåíèfor i=1:getNumMoments(self)if self.moments(i) > momentnum = i-1;return;endendnum = i;%________________________________________________________________________________% Äîáàâëåíèå óñëîâèé ñîõðàíåíèÿ:161funtion self = addSaving(self, var, t)n = getNumVars(self);N = getNumMoments(self);vetor = zeros(1, n*N);vetor((var-1)*N + t-1) = 1;vetor((var-1)*N + t) = -1;self.savings = [self.savings; vetor℄;%________________________________________________________________________________% Äîáàâëåíèå èíòåãðàëüíûõ êðèòåðèåâ:funtion self = addIntegralCriteria(self, bigmatrix, disounts)% Äîáàâëÿåò èíòåãðàëüíûå êðèòåðèè îòíîñèòåëüíî ïåðåìåííûõ x_1(t), \dots% x_n(t).
disounts - âåêòîð óíêöèé äèñêîíòà.n = getNumVars(self);N = getNumMoments(self);disoef = zeros(n, N); % êîýèöèåíòû, îïðåäåëÿåìûå óíêöèÿìè äèñêîíòàfor j=1:ndisoef(j, 1) = quad(disounts{j}, 0, self.moments(1));endfor i=2:Nfor j=1:ndisoef(j, i) = quad(disounts{j}, self.moments(i-1), self.moments(i));endendkrits = zeros(n, n*N); % âåêòîð èíòåãðàëüíûõ êðèòåðèåâfor i=1:nfor j=1:nkrits(i, ((j-1)*N+1):(j*N)) = -disoef(i, :) * bigmatrix(((i-1)*N+1):(i*N), ((j-1)*N+1):(j*N));if i==jkrits(i, ((j-1)*N+1):(j*N)) = krits(i, ((j-1)*N+1):(j*N)) + disoef(i, :);162endendendself.riteria = [self.riteria; krits℄;%________________________________________________________________________________% Ìàêñèìèçàöèÿ îäíîãî êðèòåðèÿ:funtion [x, fval℄ = getOptimalPlan(self, x0, bigmatrix, i)% Ïëàí ïðîèçâîäñòâà, íà÷èíàÿ ñ êîëè÷åñòâ ïðîäóêöèè x0, îïòèìèçèðóþùèé i-é% êðèòåðèé% bigmatrix - áîëüøàÿ ðàçðåæåííàÿ ìàòðèöà, îïèñûâàþùàÿ îãðàíè÷åíèÿ íà âñå% ïåðåìåííûå âî âñå ìîìåíòû âðåìåíèn = getNumVars(self);N = getNumMoments(self);begmatrix = zeros(n, n*N); % ìàòðèöà, îïèñûâàþùàÿ íà÷àëüíûå óñëîâèÿbegmatrix(1:n, 1:N:(N*n)) = eye(n);[ssize, Nn℄ = size(self.savings);[x, fval℄ = linprog(-self.riteria(i, :), bigmatrix - eye(n*N), zeros(n*N, 1),[begmatrix; self.savings℄, [x0'; zeros(ssize, 1)℄);fval = -fval; % íà ñàìîì äåëå, ìû íå ìèíèìèçèðóåì, à ìàêñèìèçèðóåì%________________________________________________________________________________% Íàõîæäåíèå êîìïðîìèññíîãî îïòèìóìà:funtion [x, fval℄ = getCompromisePlan(self, x0, bigmatrix)% Êîìïðîìèññíûé ïëàí ïðîèçâîäñòâà, íà÷èíàÿ ñ êîëè÷åñòâ ïðîäóêöèè x0.% bigmatrix - áîëüøàÿ ðàçðåæåííàÿ ìàòðèöà, îïèñûâàþùàÿ îãðàíè÷åíèÿ íà âñå% ïåðåìåííûå âî âñå ìîìåíòû âðåìåíèn = getNumVars(self);N = getNumMoments(self);maxwins = zeros(1, n); % èäåàëüíûé âåêòîð163for i=1:n[x, maxwins(i)℄ = getOptimalPlan(self, x0, bigmatrix, i);endbigmatrix = [bigmatrix - eye(n*N) zeros(n*N, 1)℄ % äîáàâëÿåì íîâóþ ïåðåìåííóþ z[k, Nn℄ = size(self.riteria); % k - êîëè÷åñòâî êðèòåðèåâ îïòèìàëüíîñòèbigmatrix = [bigmatrix; [-self.riteria, -ones(k, 1)℄℄; % äîáàâëÿåì íåðàâåíñòâà,% óêàçûâàþùèå, ÷òî z - ìàêñèìóì èç îòêëîíåíèé êðèòåðèåâbegmatrix = zeros(n, n*N+1); % ìàòðèöà, îïèñûâàþùàÿ íà÷àëüíûå óñëîâèÿbegmatrix(1:n, 1:N:(N*n)) = eye(n);[ssize, Nn℄ = size(self.savings);minz = zeros(1, n*N+1);minz(n*N+1) = 1; % ìèíèìèçèðóåì z[x, fval℄ = linprog(minz, bigmatrix, [zeros(n*N, 1); -maxwins'℄, [begmatrix;[self.savings zeros(ssize, 1)℄℄, [x0'; zeros(ssize, 1)℄);A.4Ïðèìåðû ñòàòè÷åñêèõ ñåòåâûõ èãð è ïðèíöèïîâ îïòèìàëüíîñòèA.4.1ÏóñòüâiÏðèìåð 1: ñòàáèëüíûå ñåòè â ñåòåâîé èãðå ñ 3 èãðîêàìèn=3(èìååòñÿ 3 èãðîêà), à óíêöèÿ âûèãðûøàäóã ðàâíî êîëè÷åñòâó èñõîäÿùèõ äóã, èHi (g) = 0Hi (g) = 1,åñëè êîëè÷åñòâî âõîäÿùèõâ ïðîòèâíîì ñëó÷àå.
Òîãäà ëþáàÿ ñåòü,â êîòîðîé èìååòñÿ èãðîê ñ êîëè÷åñòâîì âõîäÿùèõ äóã, íå ðàâíûì êîëè÷åñòâó èñõîäÿùèõ, íåÿâëÿåòñÿ ñòàáèëüíîé ïî Íýøó, ïîñêîëüêó èãðîêó âûãîäíî îòêàçàòüñÿ îò îáðàçîâàíèÿ ëèøíèõ äóã. Òàêèì îáðàçîì, èç 64 âîçìîæíûõ ñåòåé ñòàáèëüíûìè ïî Íýøó ÿâëÿþòñÿ 4 ñåòè, âêîòîðûõ êîëè÷åñòâà âõîäÿùèõ è èñõîäÿùèõ äóã ó êàæäîãî èãðîêà ðàâíû: ïóñòàÿ ñåòü, öèêë(1, 2, 3, 1),A.4.2Ïóñòüöèêë(1, 3, 2, 1)è ïîëíàÿ ñåòü.Ïðèìåð 2: ñåòåâàÿ èãðà íà äâóäîëüíîì ãðàån = 8 (ò.å.
èìååòñÿ âñåãî ëèøü 8 èãðîêîâ), à ìíîæåñòâî ñòðàòåãèé îãðàíè÷åíî óñëîâèåìoutinini ∈ {1, 2, 3, 4}, j ∈ {5, 6, 7, 8} ⇒ xoutij = xji = xij = xji = 0.Ò.å. ðàññìàòðèâàþòñÿ òîëüêî164äâóäîëüíûå ãðàû ñ äîëÿìè{1, 2, 3, 4} è {5, 6, 7, 8} (ýòîî÷åíü ñèëüíîå îãðàíè÷åíèå).  ýòîì|Xi | = 28 = 512, |G(X)| = 232 ≈ 4 · 109 .ñëó÷àå ýòîì ñëó÷àå|Xi | = 28 = 512, |G(X)| = 232 ≈ 4 · 109 .Íýøó òðåáóåò ïåðåáîðàÒîãäà íàõîæäåíèå ðàâíîâåñèÿ ïî232 ·8·512 = 244 ≈ 2·1013 âàðèàíòîâ.
Äàæå íà ìîùíîì êîìïüþòåðå ýòîçàéìåò íåñêîëüêî äíåé. Äëÿ íàõîæäåíèÿ ïîïàðíî ñòàáèëüíîãî ðàâíîâåñèÿ íóæíî ïåðåáðàòü7 · 8 · 232 ≈ 2 · 1011âàðèàíòîâ. Íà ìîùíîì êîìïüþòåðå ýòî çàéìåò íåñêîëüêî ÷àñîâ. Äëÿíàõîæäåíèÿ ìàêñèìèííîãî âûèãðûøà êàæäîãî èãðîêà òðåáóåòñÿ ïåðåáðàòü ïîðÿäêà4 · 109âàðèàíòîâ. Íà ìîùíîì êîìïüþòåðå ýòî çàéìåò íåñêîëüêî ìèíóò. Äëÿ íàõîæäåíèÿ ñèëüíîãîðàâíîâåñèÿ íóæíî ïåðåáðàòü ïîðÿäêà2232 · 82 = 270 ≈ 1021êîìïüþòåðå ýòî çàéìåò ìíîãî òûñÿ÷åëåòèé. Äëÿ íàõîæäåíèÿ232 · C8k · k · 64kâàðèàíòîâ.