Транспортные задачи:
Номер по списку равен 15. Следовательно нужно решить следующие задачи:
Задание:
5.19.Решите следующую задачу как задачу транспортного типа и симплекс методом:
1 | 0 | 2 | 4 |
3 | 5 | 4 | 6 |
1 | 2 | 3 | 10 |
3 | 5 | 12 |
Для решения этой задачи транспортным методом была составлена программа на MATLAB.
Текст программы:
Файл «FindFirstDecision.m»:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 |
function [X,NewProposal,NewDemand]=FindFirstDecision(Cost,Proposal,Demand); {{urvanov-syntax-highlighter-internal:0}} {{urvanov-syntax-highlighter-internal:1}} {{urvanov-syntax-highlighter-internal:2}} {{urvanov-syntax-highlighter-internal:3}} {{urvanov-syntax-highlighter-internal:4}} {{urvanov-syntax-highlighter-internal:5}} {{urvanov-syntax-highlighter-internal:6}} {{urvanov-syntax-highlighter-internal:7}} {{urvanov-syntax-highlighter-internal:8}} {{urvanov-syntax-highlighter-internal:9}} {{urvanov-syntax-highlighter-internal:10}} {{urvanov-syntax-highlighter-internal:11}} {{urvanov-syntax-highlighter-internal:12}} {{urvanov-syntax-highlighter-internal:13}} {{urvanov-syntax-highlighter-internal:14}} {{urvanov-syntax-highlighter-internal:15}} {{urvanov-syntax-highlighter-internal:16}} {{urvanov-syntax-highlighter-internal:17}} {{urvanov-syntax-highlighter-internal:18}} {{urvanov-syntax-highlighter-internal:19}} {{urvanov-syntax-highlighter-internal:20}} {{urvanov-syntax-highlighter-internal:21}} {{urvanov-syntax-highlighter-internal:22}} {{urvanov-syntax-highlighter-internal:23}} {{urvanov-syntax-highlighter-internal:24}} {{urvanov-syntax-highlighter-internal:25}} {{urvanov-syntax-highlighter-internal:26}} {{urvanov-syntax-highlighter-internal:27}} {{urvanov-syntax-highlighter-internal:28}} [SizeY,SizeX]=size(Cost); {{urvanov-syntax-highlighter-internal:29}} {{urvanov-syntax-highlighter-internal:30}} for n=1:SizeY for m=1:SizeX X(n,m)=-1; end; end; {{urvanov-syntax-highlighter-internal:31}} {{urvanov-syntax-highlighter-internal:32}} DelX=zeros(1,SizeX); {{urvanov-syntax-highlighter-internal:33}} CountDelX=0; {{urvanov-syntax-highlighter-internal:34}} DelY=zeros(SizeY,1); {{urvanov-syntax-highlighter-internal:35}} CountDelY=0; {{urvanov-syntax-highlighter-internal:36}} while (1) %Proverka usloviya vihoda: % Esli ostalas lish odna nevicherknutaya stroka ili %stolbec, to algoritm zavershaet svoyu rabotu if ((CountDelX==SizeX-1)&&(CountDelY==SizeY)) break; else if ((CountDelY==SizeY-1)&&(CountDelX==SizeX)) break;end; end; %Poisk minimalnogo elementa v poka eshe ne vicherknutom stolbce %ili stroke. v peremennoy MinX hranitsya koordinata po X %minimalnogo elementa (Nomer stolbca), a v peremennoy MinY %hranitsya koordinata po Yminimalnogo elementa, to est %nomer stroki. MinX=1; MinY=1; Started=1; for n=1:SizeX for m=1:SizeY if (DelX(n)~=1) && (DelY(m)~=1) if ((Cost(m,n)<Cost(MinY,MinX)) || (Started==1) ) MinY=m; MinX=n; Started=0; end; end; end; end; %Minimalnoe znacheniye= Min=Cost(MinY,MinX); %Vicherkivaniye sootvetstvuyushego stolbca %ili stroki if (Demand(MinX)<=Proposal(MinY)) %znacheiye sprosa dlya v dannom stolbce %bolshe znacheniya predlosheniya dlya %dannoy stroki. Sledovatelno nushno %udalit stolbec, v kotorom stoit %danniy minimalniy element. %Dlya ego udaleniya prosto zanesem v %DelX(MinX) znacheniye, ravnoye 1. DelX(MinX)=1; CountDelX=CountDelX+1; %naibolsheya znacheniye, kotoroe moshet prinat %peremennaya X(MinY,MinX)= znacheniyu sprosa, %v dannom stolbce, to est znacheniyu Demond(MinX); X(MinY,MinX)=Demand(MinX); else %Znacheniye predlosheniya v dannoy stroke %menshe znacheniya sprosa dlya %dannogo stolbca. Sledovatelno nushno %udalit stroku, v kotoroy nahoditsya %danniy minimalniy element. %Dlya ego udaleniya prosto zanesem v %DelY(MinY) znacheniye, ravnoye 1. DelY(MinY)=1; CountDelY=CountDelY+1; % naibolsheye znacheniye, kotoroe moshet prinat %peremennaya X(MinX,MinY)= znacheniyu predlosheniya, %v dannoy stroke, to est znacheniyu Proposal(minY) X(MinY,MinX)=Proposal(MinY); end; %teper pereschitayem zhacheniye sprosa i predlosheniya dlya %dannogo stolbca i stroki Proposal(MinY)=Proposal(MinY)-X(MinY,MinX); Demand(MinX)=Demand(MinX)-X(MinY,MinX); %Vivod rezultatov raboti na ekranv okonchatelnoy versii %funkcii eti stroki dolshni bit otklucheni Cost; X; Proposal; Demand; DelX; DelY; CountDelX; CountDelY; end; {{urvanov-syntax-highlighter-internal:37}} NewProposal=Proposal; NewDemand=Demand; {{urvanov-syntax-highlighter-internal:38}} % Posetite https://urvanov.ru |
Файл «TransportProblem.m»:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 |
function [X]=TransportProblem(Cost,X,Proposal,Demand); {{urvanov-syntax-highlighter-internal:0}} {{urvanov-syntax-highlighter-internal:1}} {{urvanov-syntax-highlighter-internal:2}} {{urvanov-syntax-highlighter-internal:3}} {{urvanov-syntax-highlighter-internal:4}} {{urvanov-syntax-highlighter-internal:5}} {{urvanov-syntax-highlighter-internal:6}} {{urvanov-syntax-highlighter-internal:7}} {{urvanov-syntax-highlighter-internal:8}} {{urvanov-syntax-highlighter-internal:9}} {{urvanov-syntax-highlighter-internal:10}} {{urvanov-syntax-highlighter-internal:11}} {{urvanov-syntax-highlighter-internal:12}} {{urvanov-syntax-highlighter-internal:13}} {{urvanov-syntax-highlighter-internal:14}} {{urvanov-syntax-highlighter-internal:15}} {{urvanov-syntax-highlighter-internal:16}} {{urvanov-syntax-highlighter-internal:17}} {{urvanov-syntax-highlighter-internal:18}} [SizeY,SizeX]=size(Cost); Noviy_Maximum=1; while Noviy_Maximum>0 {{urvanov-syntax-highlighter-internal:19}} u=zeros(SizeY,1); %massiv potencialov strok v=zeros(1,SizeX) ; %massiv potencialov stolbcov for n=1:SizeY u(n)=NaN; end; for n=1:SizeX v(n)=NaN; end; u(1)=0; yes=0;%peremennaya dlya proverki, vse li potenciali vichislenni {{urvanov-syntax-highlighter-internal:20}} {{urvanov-syntax-highlighter-internal:21}} while (yes==0) yes=1; %sleduyushiye zikli vichislyayut potenciali for m=1:SizeY for n=1:SizeX if (X(m,n)>=0) if ((u(m)~=NaN)&&(not (v(n)>=0)) &&(not (v(n)<=0)) ) v(n)=Cost(m,n)-u(m); else if ((v(n)~=NaN)) u(m)=Cost(m,n)-v(n) ; else yes=0; end end end; {{urvanov-syntax-highlighter-internal:22}} end; end; end; {{urvanov-syntax-highlighter-internal:23}} {{urvanov-syntax-highlighter-internal:24}} {{urvanov-syntax-highlighter-internal:25}} {{urvanov-syntax-highlighter-internal:26}} {{urvanov-syntax-highlighter-internal:27}} MaxX=0;MinY=0;Noviy_Maximum=0; for m=1:SizeY for n=1:SizeX if not (X(m,n)>=0) if ( (u(m)+v(n)-Cost(m,n)>=Noviy_Maximum)&&(u(m)+v(n)-Cost(m,n)>0)) MaxX=n; MinY=m; Noviy_Maximum=u(m)+v(n)-Cost(MinY,MaxX); end; end; end end {{urvanov-syntax-highlighter-internal:28}} {{urvanov-syntax-highlighter-internal:29}} if Noviy_Maximum<=0 continue; end; {{urvanov-syntax-highlighter-internal:30}} {{urvanov-syntax-highlighter-internal:31}} {{urvanov-syntax-highlighter-internal:32}} {{urvanov-syntax-highlighter-internal:33}} {{urvanov-syntax-highlighter-internal:34}} {{urvanov-syntax-highlighter-internal:35}} {{urvanov-syntax-highlighter-internal:36}} Cikl(1,1)=MinY; Cikl(2,1)=MaxX; k=2;%index sleduyushey bazisnoy peremennoy for m=1:SizeY for n=1:SizeX if (X(m,n)>=0) Cikl(1,k)=m; Cikl(2,k)=n; k=k+1; end; end; end; {{urvanov-syntax-highlighter-internal:37}} Cikl(1,k)=MinY; Cikl(2,k)=MaxX; {{urvanov-syntax-highlighter-internal:38}} {{urvanov-syntax-highlighter-internal:39}} {{urvanov-syntax-highlighter-internal:40}} {{urvanov-syntax-highlighter-internal:41}} {{urvanov-syntax-highlighter-internal:42}} {{urvanov-syntax-highlighter-internal:43}} {{urvanov-syntax-highlighter-internal:44}} {{urvanov-syntax-highlighter-internal:45}} {{urvanov-syntax-highlighter-internal:46}} {{urvanov-syntax-highlighter-internal:47}} {{urvanov-syntax-highlighter-internal:48}} {{urvanov-syntax-highlighter-internal:49}} {{urvanov-syntax-highlighter-internal:50}} m=1; for n=1:k Index(n)=m; m=m+1; end; {{urvanov-syntax-highlighter-internal:51}} {{urvanov-syntax-highlighter-internal:52}} {{urvanov-syntax-highlighter-internal:53}} {{urvanov-syntax-highlighter-internal:54}} {{urvanov-syntax-highlighter-internal:55}} {{urvanov-syntax-highlighter-internal:56}} {{urvanov-syntax-highlighter-internal:57}} {{urvanov-syntax-highlighter-internal:58}} {{urvanov-syntax-highlighter-internal:59}} {{urvanov-syntax-highlighter-internal:60}} {{urvanov-syntax-highlighter-internal:61}} {{urvanov-syntax-highlighter-internal:62}} {{urvanov-syntax-highlighter-internal:63}} {{urvanov-syntax-highlighter-internal:64}} {{urvanov-syntax-highlighter-internal:65}} {{urvanov-syntax-highlighter-internal:66}} {{urvanov-syntax-highlighter-internal:67}} {{urvanov-syntax-highlighter-internal:68}} {{urvanov-syntax-highlighter-internal:69}} {{urvanov-syntax-highlighter-internal:70}} {{urvanov-syntax-highlighter-internal:71}} n=k-1; yes=0; %Peremennaya yes yavlyaetsya flashkom. % yes=1 - zamknutiy cikl nayden % yes=0 - zamknutiy cikl ne nayden while n~=1 %Proverka, ne poluchilsya li zamknutiy cikl. %Esli poluchiksya zamknutiy cikl, to vihodim iz cikla s infor- %maciyey o tom, chto zamknutiy cikl nayden. yes=1; %Pervonachalno predpolagaem, chto Index hranit %zamknutiy cikl {{urvanov-syntax-highlighter-internal:72}} {{urvanov-syntax-highlighter-internal:73}} {{urvanov-syntax-highlighter-internal:74}} {{urvanov-syntax-highlighter-internal:75}} {{urvanov-syntax-highlighter-internal:76}} for m=2:k yes2=0; if (Cikl(1,Index(m))==Cikl(1,Index(m-1))) yes2=1; end; if (Cikl(2,Index(m))==Cikl(2,Index(m-1))) yes2=1; end; if (yes2==0) %Esli ne vipolnilos ni odno iz us- yes=0; %loviy,to znachit eto ne zamknutiy end; %cikl end; if (yes==1) n=1; continue; end; if Index(n)<k-1 %Uvelichivaem znacheniye Index(n), esli ono eshe ne %dostiglo maksimalnogo Index(n)=Index(n)+1; n=n+1; %Znacheniye n ne dolshno previsit k ili bit ravnim k if (n>=k) n=n-1; end; else %Esli znachenie Index(n) dostiglo maksimalnogo zna- %cheniya to znachit neobhodimo uvelichit element, sto- %yashiy levee Index(n)=1; n=n-1; end; end; {{urvanov-syntax-highlighter-internal:77}} {{urvanov-syntax-highlighter-internal:78}} if (yes==0) disp('Fatal error:') disp('Not closed cycle is found.'); disp('Press any key to continue...'); disp('Fatalnaya oshibka:'); disp('Ne naiden zamknutiy cikl.'); disp('Nashmite lubuyu klavishu dlya prodolsheniya... '); pause end; {{urvanov-syntax-highlighter-internal:79}} {{urvanov-syntax-highlighter-internal:80}} {{urvanov-syntax-highlighter-internal:81}} {{urvanov-syntax-highlighter-internal:82}} {{urvanov-syntax-highlighter-internal:83}} {{urvanov-syntax-highlighter-internal:84}} {{urvanov-syntax-highlighter-internal:85}} {{urvanov-syntax-highlighter-internal:86}} i=1;j=1;Cur=1;HV=0; n=1; Sub=0; Add=0;Min=-1; while n<=k-1 if (Cikl(1,Index(n))==Cikl(1,Index(n+1)) && (HV~=2)) HV=1; n=n+1; continue; end; if (Cikl(2,Index(n))==Cikl(2,Index(n+1)) && (HV~=1)) HV=2; n=n+1; continue end; if (Cur==1) {{urvanov-syntax-highlighter-internal:87}} if (Min>X(Cikl(1,Index(n)),Cikl(2,Index(n)))) Min=X(Cikl(1,Index(n)),Cikl(2,Index(n))); end; if (Min==-1) Min=X(Cikl(1,Index(n)),Cikl(2,Index(n))); end; i=i+1; HV=0; Cur=0; else {{urvanov-syntax-highlighter-internal:88}} j=j+1; HV=0; Cur=1; end; end; {{urvanov-syntax-highlighter-internal:89}} {{urvanov-syntax-highlighter-internal:90}} {{urvanov-syntax-highlighter-internal:91}} i=1;j=1;Cur=1;HV=0; n=1; Sub=0; Add=0; yes=0;%esli yes=1 to iskluchaemaya peremennaya ushe udalenna while n<=k-1 if (Cikl(1,Index(n))==Cikl(1,Index(n+1)) && (HV~=2)) HV=1; n=n+1; continue; end; if (Cikl(2,Index(n))==Cikl(2,Index(n+1)) && (HV~=1)) HV=2; n=n+1; continue end; if (Cur==1) {{urvanov-syntax-highlighter-internal:92}} X(Cikl(1,Index(n)),Cikl(2,Index(n)))=X(Cikl(1,Index(n)),Cikl(2,Index(n)))-Min; if ((yes==0) &&(X(Cikl(1,Index(n)),Cikl(2,Index(n)))==0)) X(Cikl(1,Index(n)),Cikl(2,Index(n)))=-1; yes=1; end; i=i+1; HV=0; Cur=0; else {{urvanov-syntax-highlighter-internal:93}} X(Cikl(1,Index(n)),Cikl(2,Index(n)))=X(Cikl(1,Index(n)),Cikl(2,Index(n)))+Min; j=j+1; HV=0; Cur=1; end; end; {{urvanov-syntax-highlighter-internal:94}} X(MinY,MaxX)=Min; end; {{urvanov-syntax-highlighter-internal:95}} % Posetite https://urvanov.ru |
Файл «Transport.m»:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
function X=Transport(Cost,Proposal,Demand) {{urvanov-syntax-highlighter-internal:0}} {{urvanov-syntax-highlighter-internal:1}} {{urvanov-syntax-highlighter-internal:2}} {{urvanov-syntax-highlighter-internal:3}} {{urvanov-syntax-highlighter-internal:4}} {{urvanov-syntax-highlighter-internal:5}} {{urvanov-syntax-highlighter-internal:6}} {{urvanov-syntax-highlighter-internal:7}} {{urvanov-syntax-highlighter-internal:8}} {{urvanov-syntax-highlighter-internal:9}} {{urvanov-syntax-highlighter-internal:10}} {{urvanov-syntax-highlighter-internal:11}} {{urvanov-syntax-highlighter-internal:12}} {{urvanov-syntax-highlighter-internal:13}} {{urvanov-syntax-highlighter-internal:14}} {{urvanov-syntax-highlighter-internal:15}} {{urvanov-syntax-highlighter-internal:16}} {{urvanov-syntax-highlighter-internal:17}} {{urvanov-syntax-highlighter-internal:18}} {{urvanov-syntax-highlighter-internal:19}} {{urvanov-syntax-highlighter-internal:20}} {{urvanov-syntax-highlighter-internal:21}} {{urvanov-syntax-highlighter-internal:22}} {{urvanov-syntax-highlighter-internal:23}} {{urvanov-syntax-highlighter-internal:24}} {{urvanov-syntax-highlighter-internal:25}} {{urvanov-syntax-highlighter-internal:26}} {{urvanov-syntax-highlighter-internal:27}} {{urvanov-syntax-highlighter-internal:28}} {{urvanov-syntax-highlighter-internal:29}} {{urvanov-syntax-highlighter-internal:30}} {{urvanov-syntax-highlighter-internal:31}} {{urvanov-syntax-highlighter-internal:32}} {{urvanov-syntax-highlighter-internal:33}} {{urvanov-syntax-highlighter-internal:34}} {{urvanov-syntax-highlighter-internal:35}} {{urvanov-syntax-highlighter-internal:36}} {{urvanov-syntax-highlighter-internal:37}} {{urvanov-syntax-highlighter-internal:38}} {{urvanov-syntax-highlighter-internal:39}} {{urvanov-syntax-highlighter-internal:40}} {{urvanov-syntax-highlighter-internal:41}} {{urvanov-syntax-highlighter-internal:42}} {{urvanov-syntax-highlighter-internal:43}} {{urvanov-syntax-highlighter-internal:44}} {{urvanov-syntax-highlighter-internal:45}} {{urvanov-syntax-highlighter-internal:46}} {{urvanov-syntax-highlighter-internal:47}} {{urvanov-syntax-highlighter-internal:48}} {{urvanov-syntax-highlighter-internal:49}} {{urvanov-syntax-highlighter-internal:50}} {{urvanov-syntax-highlighter-internal:51}} {{urvanov-syntax-highlighter-internal:52}} {{urvanov-syntax-highlighter-internal:53}} [X,NewProposal,NewDemand]=FindFirstDecision(Cost,Proposal,Demand);; X=TransportProblem(Cost,X,Proposal,Demand); |
Файл «WriteDecisionOfTheTransportProblem.m»:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
function WriteDecisionOfTheTransportProblem(X,ProposalNames,DemandNames) [k1,k2]=size(X); disp('Vivod rezultatov:'); str='Spisok perevozok iz punkta'; i=1; for m=1:k1 str='Spisok11 perevozok iz punkta'; disp(sprintf('%s %s',str,ProposalNames(m,:))) for n=1:k2 if (X(m,n)>0) disp(sprintf('v punkt %s sleduet perevozit %d.',DemandNames(m,:),X(m,n))) end; end; disp(' '); end |
Файл «Data.m»:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
{{urvanov-syntax-highlighter-internal:0}} Cost=[ 1 0 2 3 5 4 1 2 3 ] Demand=[3 5 12] Proposal=[ 4 6 10 ] ProposalNames=[ 'P1' 'P2' 'P3' ] DemandNames=['D1' 'D2' 'D3'] {{urvanov-syntax-highlighter-internal:1}} {{urvanov-syntax-highlighter-internal:2}} {{urvanov-syntax-highlighter-internal:3}} {{urvanov-syntax-highlighter-internal:4}} {{urvanov-syntax-highlighter-internal:5}} {{urvanov-syntax-highlighter-internal:6}} {{urvanov-syntax-highlighter-internal:7}} {{urvanov-syntax-highlighter-internal:8}} {{urvanov-syntax-highlighter-internal:9}} {{urvanov-syntax-highlighter-internal:10}} {{urvanov-syntax-highlighter-internal:11}} % ]; |
В результате чего было получено решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
X = -1 4 -1 -1 -1 6 3 1 6 Vivod rezultatov: Spisok11 perevozok iz punkta P1 v punkt D1 sleduet perevozit 4. Spisok11 perevozok iz punkta P2 v punkt D2 sleduet perevozit 6. Spisok11 perevozok iz punkta P3 v punkt D3 sleduet perevozit 3. v punkt D3 sleduet perevozit 1. v punkt D3 sleduet perevozit 6. |
Для решения этой задачи симплекс методом была составлена следующая система уравнений:
1 2 3 4 5 6 7 8 |
↓ Z=1*x1 + 0*x2 + 2*x3 + 3*x4 + 5*x5 + 4*x6 + 1*x7 + 2*x8 + 3*x9] 1*x1+ 1*x2+ 1*x3+ 0*x4+ 0*x5+ 0*x6+ 0*x7+ 0*x8+ 0*x9 = 4 0*x1+ 0*x2+ 0*x3+ 1*x4+ 1*x5+ 1*x6+ 0*x7+ 0*x8+ 0*x9 = 6 0*x1+ 0*x2+ 0*x3+ 0*x4+ 0*x5+ 0*x6+ 1*x7+ 1*x8+ 1*x9 = 10 1*x1+ 0*x2+ 0*x3+ 1*x4+ 0*x5+ 0*x6+ 1*x7+ 0*x8+ 0*x9 = 3 0*x1+ 1*x2+ 0*x3+ 0*x4+ 1*x5+ 0*x6+ 0*x7+ 1*x8+ 0*x9 = 5 0*x1+ 0*x2+ 1*x3+ 0*x4+ 0*x5+ 1*x6+ 0*x7+ 0*x8+ 1 *x9 = 12 |
Результат работы программы (решение симплекс методом):
0 4 0 0 0 6 3 1 6 0 0 0 0
Columns 14 through 16
0 0 47
Что означает:
x1=4
x6=6
x7=3
x8=1
x9=6
Если сравнить эти решения, то можно заметить, что они абсолютно одинаковые. Исходя и этого можно сделать вывод, что задача была решена верно.
5.3.Пусть в задаче 5.1 ежедневный спрос хранилища 3 падает до 4 млн. галлонов. Избыток продукции на нефтеперерабатывающих заводах 1 и 2 должен переправляться на грузовиках в другие хранилища. Соответствующие средние транспортные издержки составляют 1,5 долл. за 100 галлонов при перевозке с завода 1 и 2,2 долл. при перевозке с завода 2. Завод 3 может использовать избыток бензина для нужд своего химического производства. Сформулируйте соответствующую транспортную задачу.
Условие задачи 5.1.Три нефтеперерабатывающих завода с максимальной ежедневной производительностью в 6, 5 и 8 млн. галлонов. Бензин транспортируется в бензохранилища по трубопроводу. Стоимость перекачки бензина на одну милю, рассчитанная с учетом длины трубопровода, составляет 1 цент на 100 галлонов. В таблице расстояний, приведенной ниже, показано, что завод 1 не связан с хранилищем 3. Сформулируйте соответствующую транспортную задачу.
Бензохранилища | ||||
1 | 2 | 3 | ||
1 | 120 | 180 | — | |
Заводы | 2 | 300 | 100 | 80 |
3 | 200 | 250 | 120 |
Решение:
Транспортная задача:
1,8 | 2,7 | 999999999 | 99999999999 | 6000000 |
6,6 | 2,2 | 1,76 | 99999999999 | 5000000 |
2 | 2,5 | 1,2 | 99999999999 | 8000000 |
x1 | x2 | 4000000 | 19000000-x1-x2-4000000 |
—
Скачать ZIP-архив с исходными кодами
Поделиться: