»спользование среды MatLAB дл€ решени€ линейной программы

 

ќƒ≈–∆јЌ»≈


¬ведение

1. ѕостановка задачи линейного программировани€

1.1 ‘ормы задачи линейного программировани€

1.2 ѕереход к канонической форме

2. —имплекс-метод

2.1 “еоретические основы симплекс-метода

2.2 ѕр€мой алгоритм симплексного метода

3. ћетод √омори

4. ћатематическа€ и техническа€ постановка задачи. ѕрограммна€ реализаци€. ќписание проекта

4.1 «апуск

4.2 ќписание графического интерфейса

4.3 ќписание созданных функций

«аключение

—писок литературы


¬¬≈ƒ≈Ќ»≈


 олоссальные темпы технического прогресса породили проблему создани€ систем управлени€ сложными системами. Ёта проблема приводит к необходимости построени€ математических моделей прин€ти€ оптимальных решений.

—овокупность математических методов, занимающихс€ вопросами выбора на заданном множестве допустимых решений того решени€, которое по установленным критери€м €вл€етс€ оптимальным, составл€ет математическую дисциплину Ђисследование операцийї.

¬ свою очередь, исследование операций раздел€етс€ на р€д самосто€тельных дисциплин, а в данной работе мы столкнемс€ с задачей решени€ линейной программы симплексным методом в обычном, целочисленном и частично целочисленном вариантах.

 

1. ѕќ—“јЌќ¬ ј «јƒј„» Ћ»Ќ≈…Ќќ√ќ ѕ–ќ√–јћћ»–ќ¬јЌ»я [2]

 

1.1 ‘ормы задачи линейного программировани€


¬ общем виде задача линейного программировани€ (в дальнейшем «Ћѕ) может быть сформулирована как задача нахождени€ наибольшего значени€ линейной функции


†(1.1)


на некотором множестве D Ì Rn ,где x Î D удовлетвор€ют системе ограничений


†(1.2)


и, возможно, ограничени€м


†(1.3)


He умал€€ общности, можно считать, что в системе (1.2) первые т ограничений €вл€ютс€ неравенствами, а последующие Ч l-уравнени€ми. ќчевидно, этого всегда можно добитьс€ за счет простого переупор€дочени€ ограничений. ќтносительно направлени€ знака неравенства будем предполагать, что лева€ часть меньше или равна правой. ƒобитьс€ этого можно, умножив на (-1) обе части тех неравенств, которые имеют противоположный знак. ќграничени€ (1.3), вообще говор€, могут быть рассмотрены как частный случай ограничений в форме неравенств, но в силу особой структуры их обычно выдел€ют отдельно и называют услови€ми неотрицательности (или тривиальными ограничени€ми).

ƒополнительно следует заметить, что выбор типа искомого экстремума (максимума или минимума) также носит относительный характер. “ак, задача поиска максимума функции


†(1.4)


эквивалентна задаче поиска минимума функции


†(1.5)


„асто услови€ задачи (1.1) - (1.3), содержащей ограничени€ только типа неравенств, бывает удобно записывать в сокращенной матричной форме


†(1.6)


где с и x Ч векторы из пространства Rn, b Ч вектор из пространства Rm, a ј Ч матрица размерности m ´ п.

«адачу линейного программировани€, записанную в форме (1.1) - (1.3), называют общей задачей линейного программировани€ (ќ«Ћѕ).

≈сли все ограничени€ в задаче линейного программировани€ €вл€ютс€ уравнени€ми и на все переменные xj наложены услови€ неотрицательности, то она называетс€ задачей линейного программировани€ в канонической форме, или канонической задачей линейного программировани€ ( «Ћѕ). ¬ матричной форме  «Ћѕ можно записать в следующем виде:


†(1.7)


ѕоскольку люба€ оптимизационна€ задача однозначно определ€етс€ целевой функцией f и областью D, на которой отыскиваетс€ оптимум (максимум), будем обозначать эту задачу парой (D, f).

”словимс€ относительно терминологии, котора€ используетс€ в дальнейшем и €вл€етс€ общеприн€той в теории линейного программировани€.

ѕланом «Ћѕ называетс€ вс€кий вектор х из пространства Rn.

ƒопустимым планом называетс€ такой план «Ћѕ, который удовлетвор€ет ограничени€м (1.2)-(1.3), т. е. содержитс€ в области D. —ама область D называетс€ при этом областью допустимых планов. ќптимальным планом х* называетс€ такой допустимый план, при котором целева€ функци€ достигает оптимального (в нашем случае Ч максимального) значени€, т. е. план, удовлетвор€ющий условию


max f(x) = f(x*).


¬еличина f* = f(x*) называетс€ оптимальным значением целевой функции.

–ешением задачи называетс€ пара (х*, f*), состо€ща€ из оптимального плана и оптимального значени€ целевой функции, а процесс решени€ заключаетс€ в отыскании множества всех решений «Ћѕ.

 

1.2 ѕереход к канонической форме


ѕодавл€ющее большинство известных методов решени€ задач линейного программировани€ предназначены дл€ канонических задач. ѕоэтому начальный этап решени€ вс€кой общей задачи линейного программировани€ обычно св€зан с приведением ее к некоторой эквивалентной канонической задаче.

ќбща€ иде€ перехода от ќ«Ћѕ к  «Ћѕ достаточно проста:

Øограничени€ в виде неравенств преобразуютс€ в уравнени€ за счет добавлени€ фиктивных неотрицательных переменных , которые одновременно вход€т в целевую функцию с коэффициентом 0, т. е. не оказывают вли€ни€ на ее значение;

Øпеременные, на которые не наложено условие неотрицательности, представл€ютс€ в виде разности двух новых неотрицательных переменных:



Øпеременные, на которые наложено условие неположительности, представл€ютс€ в виде новой неотрицательной переменной помноженной на -1:



Ќетрудно заметить, что Ђплатойї за переход от общей формы задачи линейного программировани€ к канонической €вл€етс€ рост ее размерности, что, при прочих равных услови€х, €вл€етс€ фактором, усложн€ющим процесс решени€.

 

2. —»ћѕЋ≈ —-ћ≈“ќƒ

 

2.1 “еоретические основы симплекс-метода


»сход€ из свойств линейных экстремальных задач, можно заключить, что на принципиальном уровне поиск их решений сводитс€ к последовательному перебору угловых точек множества допустимых планов или, что то же самое, перебору соответствующих допустимых базисных планов. —редством решени€ данной проблемы €вились прикладные оптимизационные методы, основанные на последовательном, целенаправленном переборе базисных планов «Ћѕ.

 лассическим методом решени€ «Ћѕ стал симплекс-метод, получивший также в литературе название метода последовательного улучшени€ плана (упор€доченность обеспечиваетс€ монотонным изменением значени€ целевой функции при переходе к очередному плану), разработанный в 1947 г. американским математиком ƒжорджем ƒанцигом.

ѕусть стоит задача максимизации


†(2.1)


при услови€х


, (2.2)


Xj³ 0, j=1,Е,n (2.3)

ѕредположим, что нам удалось найти опорный план X0, в котором, например, первые m компонент отличны от нул€:


X0=(X10,X20,Е,Xm0, 0, Е, 0), (2.4)


и соответствующий базис Ѕ=(A1,A2,Е,Am).

ѕопытаемс€ выбрать другую систему базисных векторов с целью построени€ нового опорного плана, в котором k-€ переменна€ (k>m) принимает значение Q >0:


X(Q) = (X1(Q), X2(Q),Е,Xm(Q), 0, Е,Q, Е 0) (2.5)


ѕодставл€€ (2.4) в (2.2), имеем


(2.6)


ѕодставив (2.5) в (2.2), получаем


†(2.7)


–азложим вектор Ak по векторам исходного базиса


†(8)


¬ общем случае дл€ получени€ коэффициентов такого разложени€ придетс€ решать систему m уравнений с m неизвестными, котора€ имеет единственное решение, поскольку базисные векторы линейно независимы и соответствующа€ матрица имеет ненулевой определитель. «аметим, что в ситуации, когда базисные векторы €вл€ютс€ единичными (образуют единичную матрицу), искомые коэффициенты совпадают с компонентами исходного вектора; поэтому в дальнейшем мы предпочтем работать с единичным базисом.

ѕодставл€€ (2.6) и (2.8) в (2.7), получаем


, (2.9)


откуда имеем


†(2.10)


“ак как система уравнений (2.10) имеет единственное решение, то получаем представление первых m компонент нового плана


†(2.11)


≈стественно потребовать неотрицательность компонент нового плана. “ак как нарушение неотрицательности в (2.11) может возникнуть лишь при Zjk>0, то значение Q нужно вз€ть не превышающим наименьшего из отношений †к положительным Zjk.

≈сли к тому же учесть, что число положительных (базисных) компонент опорного плана должно оставатьс€ равным m, то одну из первых m (ненулевых) компонент исходного плана обращаем в нуль выбором



†(2.12)


ѕодставл€€ (2.11) в (2.1), имеем


†(2.13)


≈сли обозначить


, (2.14)

, (2.15)


то (2.13) примет вид


†(16)


»з полученных соотношений напрашиваютс€ следующие выводы.

 ритерий 1 (критерий оптимальности). ≈сли все Dk ³ 0, то выбранный план дл€ задачи максимизации €вл€етс€ оптимальным.

 ритерий 2. ≈сли обнаруживаетс€ некоторое Dk < 0 и хот€ бы одно из значений Zjk >0, то переход к новому плану увеличит значение целевой функции.

Ётот вывод с очевидностью следует из (2.16); в такой ситуации согласно (2.12) полагаем k-ю переменную равной Q и преобразуем значени€ остальных (базисных) переменных в соответствии с (2.11).

 ритерий 3. ≈сли обнаруживаетс€ некоторое Dk < 0, но все Zjk£0, то линейна€ форма задачи не ограничена по максимуму.

Ётот вывод следует из того, что согласно (2.11) компоненты нового плана сохран€ют неотрицательность при любом Q>0 (в том числе и при сколь угодно большом) и согласно (2.16) по€вл€етс€ возможность неограниченного изменени€ значени€ целевой функции.

ѕредположение о том, что базисными €вл€ютс€ первые m компонент плана, не €вл€етс€ принципиальным, и указание диапазона по j от 1 до m в (2.11)-(2.15) можно заменить на указание о принадлежности к базису УjÎЅУ.

≈сли все опорные планы задачи €вл€ютс€ невырожденными (число положительных компонент равно m), то Q отлично от нул€ и переход к новому плану согласно (2.16) измен€ет значение целевой функции, что гарантирует достижение экстремума за конечное число шагов. ѕри наличии вырожденных планов возможно т. н. зацикливание (возврат к ранее рассмотренным планам), но на практике зацикливание никогда не возникало.

 

2.2 ѕр€мой алгоритм симплексного метода [1]


ѕусть исходна€ задача приведена к канонической форме и начальный базис образует единичную матрицу. “огда базисные компоненты опорного плана совпадают с правыми част€ми ограничений и коэффициенты Zjk разложени€ вектора Xk по такому базису совпадают с компонентами этого вектора.

ƒл€ единообрази€ описани€ вычислительной процедуры в дальнейшем будем пользоватьс€ т.н. симплексной таблицей вида:


C

Ѕазис

ѕлан

C1

C2


Cm

Cm+1


Ck


Cn

баз

плана

X

X1

X2


Xm

Xm+1


Xk


Xn

1

X1

B1

1

0


0

Z1m+1


Z1k


Z1n

2

X2

B2

0

1


0

Z2m+1


Z2k


Z2n













Cm

Xm

Bm

0

0


1

Zmm+1


Zmk


Zmn

Zk

L(X)

Z1

Z2


Zm

Zm+1


Zk


Zn

Dk

D1

D2


D m

D m+1


Dk


Dn

¬ центральной части таблицы записываютс€ коэффициенты при неизвестных в ограничени€х, в столбце X - права€ часть ограничений (базисные компоненты плана), в первой строке - коэффициенты линейной формы, во второй строке Ц переменные, вход€щие в целевую функцию и систему ограничений. ќсновное поле симплекс таблицы - коэффициенты при неизвестных в ограничени€х. ¬ первом столбце дл€ удобства вычислений будем заносить коэффициенты линейной формы при базисных переменных, указанных во втором столбце (умножение его на столбец X (свободные члены Bi≥0) с суммированием дает значение L(X); аналогичное умножение его на столбец Xk даст Zk). ѕоследн€€ строка получаетс€ вычитанием из предыдущей строки элементов первой строки таблицы и позвол€ет судить об оптимальности плана.

“.к. выбор типа искомого экстремума (максимума или минимума) носит относительный характер, то при решении задач максимизации/минимизации в последней строке должны быть только неотрицательные элементы.

ќбратим внимание на определение начального опорного плана. ѕусть задача приведена к канонической форме и компоненты вектора правой части неотрицательны. ≈сли в системе векторов коэффициентов при переменных (матрице ј) обнаруживаетс€ подсистема, образующа€ единичную подматрицу, то эти векторы образуют базис опорного плана и вектор правой части определ€ет базисные компоненты этого плана.

≈сли такой единичной подматрицы не обнаруживаетс€, то либо придетс€ перебирать все подсистемы m уравнений с m неизвестными в надежде обнаружить неотрицательные решени€, либо прибегнуть к методу искусственного базиса.

¬ последнем случае в ограничени€ добавл€ют неотрицательные, т.н. искусственные переменные так, чтобы возникла единична€ подматрица коэффициентов, и эти переменные включают в линейную форму с коэффициентом - ћ дл€ задачи максимизации, где ћ>0 - сколь угодно большое число.

ѕолученна€ ћ-задача решаетс€ до получени€ оптимального плана.

≈сли в оптимальном плане ћ-задачи значени€ искусственных переменных равны нулю, то значени€ остальных компонент образуют оптимальный план исходной задачи.

≈сли в оптимальном плане ћ-задачи значение хот€ бы одной из искусственных переменных отлично от нул€, то исходна€ задача не имеет ни одного плана (ее ограничени€ противоречивы).

≈сли некотора€ задача решаетс€ пр€мым алгоритмом симплексного метода, то решение сопр€женной задачи можно видеть в строке Z конечной симплексной таблицы в позици€х, соответствующих начальному единичному базису.

 

3. ћ≈“ќƒ √ќћќ–» [1]


ѕри решении многих задач (планирование мелкосерийного производства, распределение кораблей по пут€м сообщени€, выработка суждений типа "да-нет" и т.п.) нецелочисленное решение не имеет смысла. ѕопытка тривиального округлени€ до целых значений приводит либо к нарушению ограничений задачи, либо к недоиспользованию ресурсов.  ак мы имели возможность убедитьс€, дл€ произвольной линейной программы (за исключением программ типа классической транспортной задачи, где коэффициенты матрицы ограничений равны 1 или 0) гарантировать целочисленность решени€ невозможно.

¬ случае двухмерной задачи проблема решаетс€ относительно просто путем вы€влени€ всех целочисленных точек, близких к границе множества планов, построени€ выпуклого множества планов, содержащего все целочисленные планы и решени€ задачи над этим множеством.

B общем случае выдвигаетс€ иде€ последовательного отсечени€ нецелочисленных оптимальных планов: обычным симплексным методом отыскиваетс€ оптимальный план и, если он нецелочисленный, строитс€ дополнительное ограничение, отсекающее найденный оптимальный план, но не отсекающее ни одного целочисленного плана.

Ёта иде€, принадлежаща€ ƒ. ƒанцигу и –. √омори, впервые была представлена в форме дополнительного ограничени€:


†(3.1)


(сумма небазисных компонент оптимального плана должна быть отлична от нул€; хот€ бы одна из небазисных компонент должна быть ненулевой). ¬ самом деле, оптимальный план с нулевыми значени€ми небазисных компонент этому условию не удовлетвор€ет, что подтверждает отсечение этого плана от исходного множества.

  сожалению, дл€ абсолютного большинства задач скорость сходимости процесса таких отсечений мала. ѕотому –. √омори предложена друга€ форма дополнительного ограничени€. “ак, если компонента плана, определ€ема€ k-м уравнением системы ограничений, нецелочисленна, то добавл€етс€ ограничение


, (3.2)


где fk - дробна€ часть компоненты плана (правой части ограничени€) и fkj - дробна€ часть коэффициента при Xj (цела€ часть числа Ц наибольшее целое, не превышающее это число; дробна€ часть числа равна разности между числом и его целой частью), S* - нова€ дополнительна€ переменна€.

ћожно уменьшить объем преобразований, если руководствоватьс€ следующими правилами:

1) выбирать в качестве базового дл€ построени€ дополнительного ограничени€ уравнение, определ€ющее компоненту плана с наибольшей дробной частью;

2) дл€ ввода в базис опорного плана расширенной задачи выбирать переменную, дл€ которой достигаетс€ минимум из отношений абсолютных значений D j к значени€м fk j ;

3) если одна из ранее введенных дополнительных переменных вошла в базис, ее и соответствующее ей уравнение можно отбросить (эта ситуаци€ св€зана с по€влением более жесткого услови€, перекрывающего действие ранее введенного).

ѕо€вление дополнительного ограничени€ и дополнительной переменной вновь приводит к проблеме выбора начального опорного плана расширенной задачи и к использованию с этой целью искусственной переменной. —ледует заметить, что если при поиске переменной, исключаемой из базиса, значение Q (определ€емое с учетом дополнительного ограничени€) соответствует этому ограничению, то можно отказатьс€ от использовани€ искусственной переменной (она все равно выведетс€ из базиса на этом же шаге решени€).

«аметим, что дл€ целочисленных программ может обнаружитьс€ отсутствие целочисленных планов (противоречивость ограничений).

ƒл€ предложенного здесь метода доказана конечность процесса отсечений, но число этих отсечений непредсказуемо (вполне может обнаружитьс€ быстрое решение задач с дес€тками переменных и ограничений и фантастически длительное дл€ задач небольших размеров).

 

4. ћј“≈ћј“»„≈— јя » “≈’Ќ»„≈— јя ѕќ—“јЌќ¬ ј «јƒј„»


ћатематическую и техническую постановку задачи можно сформулировать следующим образом. –азработать программное обеспечение на встроенном €зыке среды MatLAB, позвол€ющее решать линейные программы симплексным методом с учетом приведенного выше теоретического материала.

Ќесмотр€ на то, что в поставл€емом вместе с MatLAB пакете программ Optimization Toolbox имелась функци€ linprog реализующа€ решение линейных задач, было прин€то решение реализовывать симплекс-метод и метод √омори не использу€ уже готовые решени€, но максимально задейству€ встроенные функции среды разработки.

¬ ходе разработки наибольшее внимание удел€лось удобству работы с программой и качеству реализации методов.

¬ плане ограничений накладываемых на пользовател€ можно отметить лиши разумность вводимых данных.

ѕрограммна€ реализаци€

ѕрограмма написана на встроенном в MatLAB €зыке программировани€. Ќе смотр€ на всю простоту €зыка программировани€ MatLABТа стоит отметить его большую функциональность обеспечиваемую встроенными функци€ми и пакетами расширений Toolbox.

ќтличительной особенностью разработанной программы €вл€етс€ ее графический интерфейс (–исунок 1), обеспечивающий максимально удобную работы и позвол€ющий работать с программой даже не посв€щенным в программирование, математику и экономику люд€м.

ќсновна€ часть программного кода в соответствии со своим назначением разделена на функции, которые хран€тс€ отдельно от интерфейса и могут быть использованы пользователем по своему усмотрению, в том числе в других приложени€х/программах или же могут быть вызваны через консоль MatLAB.


–исунок 1. √рафический интерфейс программы

 

ќписание проекта

 

4.1 «апуск


ƒл€ запуска проекта необходимо запустить среду MatLAB и указать путь к каталогу с программой. «атем необходимо запустить графический интерфейс (–исунок 1) дл€ чего в консоли MatLABТа требуетс€ ввести guide и в открывшемс€ окошке (–исунок 2) выбрать вкладку Ђќткрыть существующий GUIї и указав путь к GUI-интерфейсу ЂMainSimplexForm.figї нажать кнопку Ђќ ї.


–исунок 2. GUIDE - среда разработки и работы с GUI-интерфейсами MatLAB

¬ итоге по€витс€ макет интерфейса (–исунок 3) дл€ запуска которого достаточно нажать комбинацию клавиш ЂCtrl+Tї или зеленую стрелочку на панели под главным меню. ѕосле запуска перед вами по€витс€ полноценный графический интерфейс (–исунок 1).


–исунок 3. ћакет GUI-интерфейса

 

4.2 ќписание графического интерфейса


¬верху формы расположено главное меню (–исунок 4), состо€щее из пунктов Ђѕримерыї, Ђƒополнительної и Ђ¬ыходї.


–исунок 4. √лавное меню


ѕункт Ђѕримерыї позвол€ет загрузить или создать пример работы с программой. ѕримеры хран€тс€ в текстовых файлах с расширением Ђmatexї содержащих целевую функцию, ограничени€ и услови€ неотрицательности.

ѕункт Ђƒополнительної позвол€ет пользовател€м операционной системы Windows получить доступ к  алькул€тору, Ѕлокноту и некоторым другим приложени€м.

ѕункт Ђ¬ыходї закрывает среду MatLAB.

ƒл€ ввода функции, ограничений, условий неотрицательности и выбора метода используетс€ центральна€ часть формы (–исунок 5).


–исунок 5. «десь можно ввести исходные данные и выбрать метод решени€


ƒл€ запуска метода и просмотра результатов его работы служит нижн€€ часть формы (–исунок 6).


–исунок 6. «десь можно запустить метод и просмотреть результат его работы


ќсобое внимание надо обратить на статусное сообщение. ѕол€ Ђќптимальный планї и ЂЁкстремум функцииї будут заполнены последними значени€ми, но судить об их верности можно только прочитав статусное сообщение! –ешение двойственной задачи отображаетс€ только дл€ обычного варианта симплексного метода.

¬ случае если вы хотите воспользоватьс€ частично целочисленным методом стоит обратить внимание на ввод требуемых иксов (–исунок 7).


–исунок 7. ¬вод номеров требуемых целых иксов


Ќеобходимо через пробел вводить номера иксов, которые вы хотите видеть целыми.

 

4.3 ќписание созданных функций


¬ ходе разработки проекта были написаны следующие функции:

1.  parser_input Ц функци€ разделени€ строки типа У2x1+5x2-7x3Ф на массив номеров иксов и массив коэффициентов при этих иксах;

2.  parser_allogr Ц функци€ канонизации, формирующа€ составл€ющие симплексной таблицы из введенных функции, ограничений, условий неотрицательности;

3.  load_example Ц функци€ чтени€ файла с примером;

4.  save_example Ц функци€ записи файла с примером;

5.  simple_simplex Ц функци€, реализующа€ простой симплекс-метод;

6.  gomory_simplex Ц функци€, реализующа€ метод √омори;

7.  MainSimplexForm Ц функци€, св€занна€ с графическим интерфейсом и содержаща€ основные вызовы остальных функций.

¬се перечисленные выше функции снабжены подробной справкой и дл€ более подробного ознакомлени€ с ними достаточно в консоли MatLAB ввести: help им€_функции

ƒанные функции можно использовать в других программах написанных дл€ MatLAB, т.к. они работают в проекте как Ђавтономные модулиї.

 

«аключение


»тогом написани€ данной курсовой работы €вл€етс€ компьютерна€ реализаци€ решени€ линейных программ симплексным методом в обычном, целочисленном и частично целочисленном вариантах.

–азработанна€ программа позволит упростить решение подобных задач непосв€щенными во все тонкости пользовател€м, а также послужит примером дл€ интересующихс€ экономико-математическими методами людей.

—ледует отметить, что симплексный метод в различных вариаци€х фигурирует во многих задачах дисциплины Ђисследование операцийї, например, при рассмотрении двойственности в линейном программировании, целочисленном линейном программировании, матричных играх и т.д. —оответственно созданна€ программа позволит упростить решение упом€нутых выше задач.

 

писок литературы


1.  “ынкевич ћ.ј. ЂЁкономико-математические методы (исследование операций)ї, издание 2-е, исправленное и дополненное,  емерово, 2007г.

2.   онюховский ѕ.¬. Ђћатематические методы исследовани€ операций в экономикеї, —ѕб.: ѕитер, 2008г.

3.  ƒегт€рев ё.». Ђ»сследование операцийї, ћ.: ¬ысша€ школа, 2009 г.

4.  јнуфриев ».≈., —мирнов ј.Ѕ., —мирнова ≈.Ќ. ЂMATLAB 7ї, —ѕб.: Ѕ’¬-ѕетерберг, 2005г.

5.  ƒъ€конов ¬. ЂMATLAB 6: ”чебный курсї, —ѕб.: ѕитер, 2010г.


—ќƒ≈–∆јЌ»≈ ¬ведение 1. ѕостановка задачи линейного программировани€ 1.1 ‘ормы задачи линейного программировани€ 1.2 ѕереход к канонической фор

Ѕольше работ по теме:

ѕредмет: Ёкономика отраслей

“ип работы:  урсова€ работа (т)

найти  

ѕќ»— 

Ќовости образовани€

 ќЌ“ј “Ќџ… EMAIL: MAIL@SKACHAT-REFERATY.RU

—качать реферат © 2018 | ѕользовательское соглашение

—качать      –еферат

ѕ–ќ‘≈——»ќЌјЋ№Ќјя ѕќћќў№ —“”ƒ≈Ќ“јћ