![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
В аспекті вирішення задач лінійного програмування розглянемо математичне формулювання і алгоритм розв’язання транспортної задачі.
Змістовна постановка задачі: Однорідний продукт, зосереджений у m пунктах відправлення в кількостях а1, а2,... аm одиниць відповідно, необхідно доставити в кожний із n пунктів призначення в кількості b1, b2,... bn одиниць відповідно. Вартість (відстань) перевезення одиниці продукту з i-го пункту відправлення в j-й пункт призначення дорівнює сij і відома для кожного маршруту. Нехай xij - кількість продукту, перевезеного з і-ro пункту відправлення в j-й пункт призначення. Задача полягає у визначенні таких розмірів xij для всіх маршрутів, при яких сумарна вартість (відстань) перевезень була б мінімальною.
Математична модель задачі:
Позначимо:
сij - тарифи (вартість, час, відстань) перевезення одиниці вантажу з i-го пункту відправлення в j-й пункт призначення;
ai - запаси вантажу в i-му пункті відправлення;
bі — потреба у вантажі в j-му пункті призначення;
xij - кількість одиниць вантажу, перевезеного з і-го пункту відправлення в j-й пункт призначення.
Тоді математична модель транспортної задачі про планування перевезень має такий вигляд:
m n
y=∑∑cijxij→min; (3.12)
i=1 j=1 xijÎΩ
m ____
Ω: fj=∑xij=bi, j=1,n; (3.13)
i=1
n ____
fn+i=∑xij=ai, i=1,m; (3.14)
j=1 _______ _______
xij≥0; i=1,m; j=1,m. (3.15)
Тут (3.12) - цільова функція, що визначає вартість перевезень усього вантажу. Саме екстремальне (мінімальне) значення цієї функції необхідно знайти в задачі. Причому значення змінних хij, при яких цільова функція досягає свого мінімуму, повинні належати області припустимих рішень Ω.
Вирази (3.13) - (3.14) визначають область припустимих рішень Ω. При цьому вираз (3.13) відбиває потреби у вантажі в пунктах призначення, вираз (3.14) визначає запаси вантажів у пунктах відправлення, а вираз (3.15) відокремлює негативну область значень хij, в яку дані змінні не можуть потрапляти за своїм фізичним змістом.
Вирази (3.13)-(3.15) називаються обмеженнями задачі лінійного програмування. Вирішення задачі (частковий набір значень змінних xi) називається припустимим, якщо воно одночасно задовольняє всім і обмеженням задачі. Вирішення задачі називається оптимальним, якщо воно забезпечує оптимум (у даному випадку мінімум) функції цілі.
Вважатимемо, що функції y, f1, f2,...,fn - неперервні лінійні функції, задані на невід'ємному ортанті евклідового простору Rn. Дані функції мають місце, коли перевезений вантаж є рідиною, сипкою речовиною, дрібними заготівлями або дрібною неспакованою продукцією. Такий вантаж характеризується параметрами, що являють собою вагу, довжину (погонні метри), площу (квадратні метри), об'єм і т.п.
Якщо загальна потреба у вантажі в пунктах призначення дорівнює запасу вантажу в пунктах відправлення, тобто
m n
∑ai=∑bj, (3.16)
i=1 j=1
то модель такої транспортної задачі називається закритою, у противному разі - відкритою.
При вирішенні задач лінійного програмування використовують відповідні теореми.
Теорема 1.1. Для можливості розв'язання транспортної задачі необхідно і достатньо, щоб запаси вантажу в пунктах відправлення були рівні потребам у вантажі в пунктах призначення, тобто щоб виконувалася рівність (3.16).
У випадку перевищення запасу над потребою, тобто вводиться фіктивний (n+1)-й пункт призначення з потребою
. При цьому відповідні тарифи вважаються рівними нулю:ci,n+1=0 (i=1,m).Така задача буде вже транспортною задачею, для якої умова (3.13) виконується.
Аналогічно, якщо , вводиться фіктивний (m+1) -й пункт відправлення із запасом вантажу
. При цьому відповідні тарифи вважаються рівними нулю: cm+1,j=0 (j=1,n).Така задача буде вже транспортною задачею, для якої умова (3.16) виконується.
Далі будемо розглядати закриту модель транспортної задачі. Якщо ж модель конкретної задачі є відкритою, то, виходячи зі сказаного вище, її необхідно перетворити так, щоб виконувалася рівність (3.16).
У відкритій моделі область припустимих значень (за інших рівних умов) значно ширше, тому цільова функція досягає кращих значень або, принаймні, не гірше.
Особливості вирішення закритої транспортної задачі:
Визначення 1.1. Усяке невід'ємне рішення систем лінійних рівнянь (3.13) і (3.14), що обумовлене матрицею X=[xij], i=1,m, j=1,n, називається планом транспортної задачі.
Визначення 1.2. План X* =[x*ij], i=1,m, j=1,n, при якому функція (3.12) приймає своє мінімальне значення, називається оптимальним планом транспортної задачі.
Число змінних xij y транспортній задачі з m пунктами відправлення і n пунктами призначення дорівнює mn, а число рівнянь у системах (3.13) і (3.14) дорівнює m+n. Оскільки передбачається, що виконується умова (3.16), то число лінійно незалежних рівнянь дорівнює m+n-1. Отже, опорний план транспортної задачі може мати не більше m+n-1 відмінних від нуля невідомих.
Визначення 1.3. План X* =[x*ij], i=1,m, j=1,n є опорним, якщо в ньому кількість відмінних від нуля компонентів у точності дорівнює m+n-1, а якщо менше - то ні.
Для визначення опорного плану існує декілька методів. Один з них - метод північно-західного кута, який буде розглянутий нижче.
Як і для всякої задачі лінійного програмування, оптимальним план транспортної задачі є також опорним планом. Для визначення оптимального плану транспортної задачі можна використовувати диференціальний алгоритм, симплекс-метод та інші універсальні методи. Однака через виняткову практичну важливість цієї задачі і специфіку її обмежень (кожна невідома входить лише в два рівняння систем (3.13) і (3.14), а коефіцієнти при невідомих дорівнюють одиниці) для визначення оптимального плану транспортної задачі розроблені спеціальні методи. Один з них - метод потенціалів - розглядається в даному курсі.
Звичайно вихідні дані транспортної задачі записують у вигляді табл.3.1.
Таблиця 3.1 - Вихідні дані транспортної завдання
Пункти відправлення | Запаси | Пункти призначення | |||||
… | j | … | n | ||||
Потреби | |||||||
b1 | b2 | … | b1 | … | bn | ||
a1 | c11 x11 | c12 x12 | … | c1j x1j | … | c1n x1n | |
a2 | c21 x21 | c22 x22 | … | c2j x2j | … | c2n x2n | |
… | … | … | … | … | … | … | … |
i | ai | ci1 xi1 | ci2 xi2 | … | cij xij | … | cin xin |
… | … | … | … | … | … | … | … |
m | am | cm1 xm1 | cm2 xm2 | … | cmj xmj | … | cmn xmn |
Визначення початкового опорного плану транспортної задачі: Вирішення транспортної задачі починають із знаходження будь-якого опорного плану. Для цього розроблені специфічні методи. Один з них одержав у літературі назву "метод північно-західного кута". Іноді його називають ще "діагональним методом", "методом перехідних приступів" і т. ін.
Сутність цього методу полягає в тому, що опорний план знаходять за m+n-1 кроками, на кожному з яких у таблиці транспортної задачі заповнюють одну клітку. Заповнення однієї клітки забезпечує задоволення потреби у вантажі одного з пунктів призначення (відповідно до того, в стовпці якого знаходиться клітка), або вивіз вантажу з одного з пунктів відправлення (відповідно до того, в рядку якого знаходиться клітка).
Заповнення таблиці слід починати з лівого верхнього квадрата (північно-західного кута). З позиції цього квадрата порівнюють запас вантажу в першому пункті відправлення з потребою першого пункту призначення. Вибирають менший розмір і записують у даний квадрат, який з цього моменту стає "зайнятим". Якщо в клітку записується потреба пункту призначення, то з подальшого розгляду виключають відповідний стовпець таблиці і переходять у ліву сусідню клітку. Якщо в клітку записується запас пункту відправлення, то з подальшого розгляду виключають відповідний рядок таблиці і переходять у сусідню клітку, що знаходиться нижче заповненої.
У новій клітці для частини таблиці, що залишилася, повторюють процедуру першого кроку з урахуванням зміни запасу вантажу одного з і відправників або потреби у вантажі одного з одержувачів у результаті попереднього кроку.
Після m+n-2 описаних вище кроків одержують задачу з одним пунктом відправлення і одним пунктом призначення. При цьому залишається вільною тільки одна клітка, а запаси пункту відправлення дорівнюватимуть потребам пункту призначення. Заповнення цієї клітки, тобто здійснення (m+n-1) -го кроку приводить до шуканого опорного плану.
Слід зауважити, що в процесі використання методу північно-західного кута може трапитися, що потреби у вантажі чергового пункту призначення рівні запасам чергового пункту відправлення. У цьому випадку з подальшого розгляду виключають або стовпець, або рядок, тобто тільки що-небудь одне. Таким чином, запаси відповідного пункту відправлення, або потребу відповідного пункт призначення вважають рівними нулю. Цей нуль записують у чергову клітку, яка заповнюється [61].
Зазначені вище умови гарантують одержання m+n-1 зайнятих кліток, у яких знаходяться компоненти опорного плану.
Опорний план перевезень повинен відповідати таким вимогам:
по-перше, кількість зайнятих маршрутів (кліток) повинна бути на одиницю менше суми числа постачальників т і числа споживачів п, тобто повинна дорівнювати значенню m+n-1;
по-друге, не повинно бути жодного зайнятого маршруту (клітки), що опинився б єдиним і в рядку, і в стовпці таблиці.
Визначення оптимального опорного плану транспортної задачі:
Для відзначення оптимального плану транспортної задачі розроблено декілька методів. Найбільш часто використовують метод потенціалів. Метод припускає, що вже відомий якийсь опорний план. Його можна одержати, наприклад, розглянутим методом північно-західного кута. Вихідний опорний план необхідно перевірити на оптимальність.
Теорема 1.2. Якщо для деякого опорного плану X* =[x*ij], i=1,m, j=1,n транспортної задачі із заданими тарифами перевезень cij існують такі числа αi(i=1,m) i βj(j=1,n), що
βi-αj=cij при xij>0 (3.17)
і βi-αj≤cij при xij=0 (3.18)
для всіх i=1,m і j=1,n, то X* =[x*ij] - оптимальний план.
Визначення 1.4. Числа αi(i=1,m) i βj(j=1,n) називаються потенціалами відповідно пунктів відправлення і пунктів призначення.
Теорема 1.2 дозволяє побудувати алгоритм знаходження рішення транспортної задачі. Він являє собою наступне. Нехай знайдений опорний план транспортної задачі. Для кожного з пунктів відправлення і призначення визначають потенціали αi(i=1,m) i βj(j=1,n) із системи рівнянь
βi-αj=cij. (3.19)
Оскільки число заповнених кліток дорівнює n+m-1, то система (3.19) із n+m невідомими містить n+m-1 рівнянь. Оскільки число невідомих перевищує на одиницю число рівнянь, одне з невідомих потрібно взяти рівним довільному числу, наприклад α1=0, і знайти послідовно із системи (3.19) значення інших невідомих.
Після того, як усі потенціали знайдені, дія кожною з вільних кліток визначають числа αij=βi-αj-cij. Якщо серед чисел αij немає позитивних, то знайдений опорний план є оптимальним. Якщо ж для деякої вільної клітки αij>0, то опорний план, що перевіряється, не є оптимальним, і треба перейти до нового опорного плану. Для цього розглядають усі вільні клітки, для яких αij>0, і вибирають ту, для якої число αij максимальне. Обрану клітку необхідно заповнити.
Заповнюючи обрану клітку, треба змінити обсяги перевезень, записаних у ряді інших зайнятих клітках і зв'язаних з обраною циклом.
Визначення 1.5. Циклом у таблиці транспортної задачі називається замкнута ломана лінія, вершини якої розташовані в зайнятих клітках таблиці, а ланки - уздовж рядків і стовпів, причому в кожній вершині циклу зустрічаються рівно дві ланки, одна з яких знаходиться в рядку, а інша - у стовпці.
Якщо ломана лінія, що складає цикл, перетинається сама із собою, то точка самоперетину не є вершиною.
При правильній побудові опорного плану для будь-якої вільної клітки можна побудувати тільки один цикл. Після того як для обраної вільної клітки він побудований, необхідно перейти до нового опорного плану. Для цього треба перемістити вантажі в межах кліток, що утворюють цикл. Переміщення роблять за такими правилами:
кожній з кліток, пов'язаних циклом з обраною вільною кліткою, і приписують знак "+" або "-", причому вільній клітці - знак плюс, а всім іншим кліткам - по черзі знаки мінус і плюс;
у вільну клітку переносять менше з чисел xij, що знаходяться в мінусових клітках, і одночасно це число додають до відповідних чисел, що знаходяться в "плюсових" клітках, і віднімають із чисел, що знаходяться в "мінусових" клітках. Клітка, що раніше була вільною, стає зайнятою, а "мінусова" клітка, в якій стояло мінімальне число xij, стає вільною.
У результаті зазначених вище переміщень вантажів у межах кліток, пов'язаних циклом з обраною вільною кліткою, визначають новий опорний план транспортної задачі. Число зайнятих кліток залишається рівним n+m-1. Якщо в зайнятих "мінусових" клітках циклу є два і більше однакових мінімальних чисел xij, то звільняють тільки одну з таких кліток, а інші залишають зайнятими з нульовими постачаннями.
Отриманий новий опорний план транспортної задачі перевіряють на оптимальність. Для цього визначають потенціали пунктів відправлення і призначення і знаходять числа αij=βi-αj-cij для всіх вільних кліток. Якщо серед цих чисел не буде позитивних, то це означає, що новий опорний план є оптимальним. Якщо ж є позитивні числа, то необхідно перейти до нового опорного плану. У результаті ітераційного плану кінцевого числа переходів одержують оптимальний план процесу.
Таким чином, процес вирішення транспортної задачі методом потенціалів включає такі етапи:
1-й етап. Знаходять опорний план.
2 й етап. Знаходять потенціали пунктів відправлення; і призначення.
3-й етап. Визначають числа αij для кожної вільної клітки. Якщо серед них немає позитивних, то отримано оптимальний план транспортної задачі, у противному разі переходять до нового опорного плану.
4-й етап. Вибирають серед позитивних чисел αij максимальне, будують для відповідної вільної клітки цикл перерахування і роблять зсув за циклом, одержуючи при цьому новий опорний план. Далі переходять до другого етапу.
Розглянемо приклад вирішення транспортної задачі методом потенціалів.
Приклад вирішення транспортної задачі методом потенціалів:
Приклад 1.1. Три заводи, що виготовляють бетонні конструкції, постачаються цементом з чотирьох складів. Попит заводів bj відповідно дорівнює 280, 90 і 180 тис.т/міс. Пропускна здатність складів ai, відповідно становить 200, 150, 80 і 120 тис.т/міс. Відстані перевезень (у км)
![]() |
з і-го складу на j-й завод подані в матриці C=[cij]=
Потрібно скласти план перевезень цементу зі складів на заводи, що задовольняв би пропускним спроможностям складів і потребам заводу, а сумарний пробіг вантажного транспорту був би мінімальним.
Вирішення
Позначимо через xij - кількість цементу, який щомісяця потрібно доставляти щомісяця на j-го завод з i-го складу. Тоді математична модель задачі має вигляд:
y=x11+5x12+3x13+6x21+8x22+9x23+2x31+7x32+4x33+4x41+x42+11x43→min; (3.20)
xijÎΩ
Ω: x11+x21+x31+x41=280; (3.21)
x12+x22+x32+x42=90; (3.22)
x13+x23+x33+x43=180; (3.23)
x11+x12+x13=200; (3.24)
x21+x22+x23=150; (3.25)
x31+x32+x33=80; (3.26)
x41+x42+x43=120; (3.27)
xij³0. (3.28)
Тут (3.20) - цільова функція, (3.22) - (3.24) - обмеження задачі, що визначають місячні запаси цементу на складах, (3.25) - (3.27) – обмеження задачі, що визначають місячну потребу в цементі на заводах (3.28) - обмеження, що визначає неможливість негативних значень для постачань цементу на заводи.
1-й крок. 1-й етап. Використовуючи метод північно-західного кута, знайдемо опорне вирішення транспортної задачі (3.20)- (3.28).
Відповідно до цього методу заповнюємо таблицю, починаючи лівого верхнього квадрата. Порівнюємо запас вантажу в першому пункті відправлення (200 тис.т/міс.) із потребою першого пункту призначення (280 тис.т/міс.). Вибираємо меншу величину (200) і записуємо її в даний квадрат. Оскільки весь запас у першому пункті відправлення вичерпаний, то з подальшого розгляду виключаємо перший рядок і переходимо в сусідню клітку, що знаходиться нижче заповненої. У новій клітці для частини таблиці, що залишилася, повторюємо процедуру заповнення верхньої лівої клітки, але з урахуванням того, що потреба першого пункту призначення зменшилася на 200 тис.т/міс. і стала рівною 80 тис.т/міс. Тобто порівнюємо запас другого пункту відправлення (150 тис.т/міс.) з новою потребою першого пункту призначення (80 тис т/міс). Вибираємо меншу величину(80) і записуємо її в нову клітку Оскільки потреба у вантажі в першому пункті призначення повністю задоволена, то з подальшого розгляду виключаємо перший стовпець і переходимо в сусідню клітку, що знаходиться справа від тільки що заповненої. Для нової верхньої лівої клітки частини таблиці, що залишилася, повторюємо процедуру заповнення з урахуванням зміни запасу в другому пункті відправлення на 50 тис.т/міс. І так доти, поки не буде заповнено m+n-2 кліток.
Остання (m+n-2)-я клітка заповнюється механічно - у неї записується залишкова потреба останнього пункту призначення або залишковий запас останнього пункту відправлення. В умовах задачі це величина 120. Усі проміжні результати по знаходженню початкового опорного плану
Х0 = відображені в табл. 3.2. Ці результати в таблиці виділені напівжирним шрифтом.
Для початкового опорного плану обчислюємо значення цільової функції (3.20):
y0=1х200+6х80+8х70+7х20+4х60+11х120=2940 тис.т/міс.
Це значення буде використано на наступних кроках для контролю просування до оптимуму. Значення цільової функції повинно послідовно зменшуватися з кожним кроком.
Таблиця 3.2 - Проміжні результати по знаходженню початкового опорного плану
Пункт відправ-лення | Запас вантажу | Пункт призначення | Потенціал пункту відправлення ai | ||
Потреба | |||||
-5 | |||||
- 20 | + 60 | -4 | |||
+ | - 120 | -11 | |||
Потенціал пункту призначення bi |
2-й етап. Знайдений опорний план перевіряємо на оптимальність. У зв'язку з там знаходимо потенціали пунктів відправлення і призначення із системи
b1-a1=1, b2-a2=8, b3-a3=4,
b1-a2=6, b2-a3=7, b3-a4=11.
що містить шість рівнянь із сімома невідомими. Вважаючи a1=0, знаходимо b1=1, a2=-5, b2=3, a3=-4, b3=0, a3=-11. Записуємо знайдені потенціали в табл.3.2.
3-й етап. Для кожної вільної клітки обчислюємо числа αij=βi-αj-cij: α12=-2, α13=-3, α23=-4, α31=3, α41=8, α42=13.
Записуємо знайдені числа у відповідні вільні клітки табл.3.2 і вміщуємо їх у рамочки, щоб відрізняти їх від іншої інформації в таблиці Тому що серед чисел αij є позитивні, то опорний план Х0 не є оптимальним.
4-й етап. Серед позитивних чисел αij вибираємо максимальне: α42=13. Для відповідної вільної клітки будуємо цикл, а саму клітку позначаємо знаком «+». У табл.3.2 зайняті клітки, що складають цикл, виділені сірим фоном. Потім позначаємо знаками «-» і «+» по черзі інші клітки циклу, слідуючи уздовж ломаної лінії циклу.
Найменшим з чисел xij у «мінусових» клітках є x32 (20). Дана клітка стає вільною, а інші клітки циклу змінюють свої значення в такий спосіб: Х42=20, х43=120-20=100, х33=60+20=80.
У результаті зроблених перетворень одержуємо новий опорний план
X1=
При такому опорному плані функція цілі (3.20) стає рівною 2680 тис.т/міс, що менше вихідного значення 2940 тис.т/міс.
На цьому закінчується 1-й крок оптимізації. На наступному кроці процедура 1-го кроку повторюється, але без першого етапу.
2-й крок. Аналізуємо новий опорний план (табл.3.3) на оптимальність. Знову знаходимо потенціали пунктів відправлення і пунктів призначення, для чого складаємо таку систему рівнянь:
b1-a1=1, b2-a2=8, b2-a4=1,
b1-a2=6, b3-a3=4, b3-a4=11.
Вважаючи a1=0, знаходимо b1=1, a2=-5, b2=3,a4=2, b3=13, a3=9. Для кожної вільної клітки обчислюємо числа αij: α12=-2, α13=10, α23=9, α31= -10,
α32=-13, α41=-5.
Тому що серед чисел αij є позитивні (α13=10, α23=9), то опорний план X1
не є оптимальним.
Таблиця 3.3 - Новий опорний план
Пункт відправлення | Запас вантажу | Пункт призначення | Потенціал пункту відправлення ai | ||
Потреба | |||||
- 200 | + | ||||
+ 80 | - 70 | -5 | |||
+ 20 | - 100 | ||||
Потенціал пункту призначення bi |
Серед позитивних чисел αij вибираємо максимальне: α13=10. Для відповідної вільної клітки будуємо цикл, а саму клітку позначає знаком «+». У табл.3.3 зайняті клітки, що складають цикл, виділені рим фоном. Потім позначаємо вузлові клітки циклу по черзі знаками «-» і «+».
Найменшим із чисел xij у «мінусових» клітках є х23 (70). Дана клітка стає вільною, а інші клітки циклу змінюють свої значення в так спосіб: x11=200-70=130, x13=70, х21=80+70=150, x42=20+70=90, x43=100-70=30.
У результаті виконаних перетворень одержуємо новий опори план
Х2=
При такому опорному плані функція (3.20) стає рівною 1980 тис.т/міс, що значно менше попереднього значення 2680 тис.т/міс.
3-й крок. Аналізуємо новий опорний план (табл. 3.4) на оптимальність. Знову знаходимо потенціали пунктів відправлення і пунктів призначення, для чого складаємо наступну систему рівнянь:
b1-a1=1, b1-a2=6, b2-a4=1,
b3-a1=3, b3-a3=4, b3-a4=11.
Вважаючи a1=0, знаходимо b1=1, b3=3, a2=-5, b3=4, a3=0, a4=-8, b2=-7. Для кожної вільної клітки обчислюємо числа αij: α12=-12, α22=-10, α23=-1, α31=-1, α32=-14, α41=5. Оскільки серед чисел αij одне позитивне (α41=5), то опорний план Х2 не є оптимальним.
Таблиця 3.4 - Новий опорний план
Пункт відправ-лення | Запас вантажу | Пункт призначення | Потенціал пункту відправлення ai | ||
Потреба | |||||
- 130 | + 70 | ||||
-5 | |||||
+ | - 30 | -8 | |||
Потенціал пункту призначення bi | -7 |
Для відповідної вільної клітки (нижньої, лівої) будуємо цикл, а саму клітку позначаємо знаком «+». У табл.3.4 зайняті клітки, що складають цикл, виділені сірим фоном. Потім позначаємо вузлові клітки циклу по черзі знаками «-» і «+». Найменшим із чисел xij у «мінусових» клітках є х43 (30). Дана клітка стає вільною, а інші клітки циклу змінюють свої значення в такий спосіб:
x11 =130-30=100, х13 =70+30=100, x14=30.
У результаті зроблених перетворень одержуємо новий опорі план
Х4=
При такому опорному плані функція (3.20) стає рівною 1830 тис.т/міс, що менше попереднього значення 1980 тис.т/міс.
4-й крок. Аналізуємо новий опорний план (табл.3.5) на оптимальність. Знову знаходимо потенціали пунктів відправлення і пунктів призначення, для чого складаємо наступну систему рівнянь:
b1-a1=1, b1-a2=6, b1-a4=4,
b3-a1=3, b3-a3=4, b2-a4=1.
Вважаючи a1=0, знаходимо b1=1, b3=3, a2=-5, a3=-1, a4= -3, b2= -2. Для кожної вільної клітки обчислюємо числа αij: α12=-7, α22=-4, α23=-1, α31=0, α32=-8, α41=-5. Тому що серед чисел αij і немає строго позитивних, то опорний план Х3
є оптимальним.
Таблиця 3.5 - Новий опорний план
Дата публикования: 2014-11-02; Прочитано: 2032 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!