Урок 8. Линейное и нелинейное программирование

Теоретические положения

Задачи линейного и нелинейного программирования формируются следующим образом: найти значения переменных, которые бы обращали целевую функцию (ЦФ) в минимум или максимум.
ЦФ - это комбинация суммы, произведений переменных величин и заданных чисел (констант), например:
F=10*x+20*y+3*z+80*t  и т.д. -> max.     (1)
Переменные величины x,y,z,t и т.п. имеют, как правило, ограничения простые, типа больше нуля:
x,y,z,t > 0,                               (2)
и сложные, состоящие из равенств и неравенств типа:
10*x +30*y+5*z =  30,           (3)
50*x +10*y+9*z  ?  60,          (4)
10*x +30*y+5*z  ?  10.          (5)
Если комбинации переменных в ЦФ и в ограничениях не содержат их перемножения, возведения в степень и т.п., то такие задачи называются линейными, в противном случае - нелинейными.
ЦФ, области ограничений имеют геометрические интерпретации: в линейных задачах - это прямые, плоскости, гиперплоскости, в нелинейных кривые, поверхности, гиперповерхности.

Графический способ решения задачи заключается в том, что, если ЦФ дать какое-то (произвольное) значение и привести ее к уравнению в отрезках, то это будет плоскость в том же пространстве, в котором находится многогранник ограничений, и, если найти к этой плоскости ближайшую или самую удаленную вершину многогранника ограничений, то координаты этих вершин, при подстановке их в уравнения ЦФ дадут ее максимум или минимум.

Определить ближайшую или наиболее удаленную вершину многогранника от заданной плоскости, особенно в пространстве больше двух измерений, можно одним из следующих способов:
- заменой плоскостей проекций с помощью преобразования плоскости ЦФ в проецирующее положение (см. курс начертательной геометрии);
- методом графочисленной оптимизации, рассматриваемом в данном курсе;
- симплекс методом (для нелинейных задач см. справочник Корна);
- на основе моделирования в твердотельной системе CG .
В последнем случае легко определяется и сам многогранник ограничений, как пространство, ограниченное полупространствами.

Упражнения

 n/n   Название упражнений и обращение к тексту МК   Рисунок 
1 8.1. Найти максимум ЦФ: 
F(x,y) = x+y -> max.   (1) 
при ограничениях, заданных системой неравенств: 
x/100 + y/170 > 1,      (2) 
x/140 + y/120 > 1,      (3) 
x > 0,                           (4) 
y > 0.                           (5) 
Решение задачи графочисленным способом заключается в переборе возможных x и y в области ограничений или на границе области ограничений и подстановке их в целевую функцию (1). 
Смоделируем сначала задачу перебора точек в области ограничений 
8.1.1. Задаем ЦФ и ограничения  в геометрической интерпретации linpr0.mac 
8.1.2. Осуществляем перебор линий в области ограничений linpr1.mac 
8.1.3. Осуществляем перебор точек в области ограничений linpr2.mac 
Одако известно, что оптимальное решение лежит на границе (рисунок) выпуклого многогранника. 
8.1.4. Также задаем ЦФ и ограничения  в геометрической интерпретации linmd0.mac 
8.1.5. Осуществляем перебор точек  и вычисление ЦФ linmd.mac 
Контрольные вопросы
Рис.8.1.3 
 
 

Рис.8.1.5 
 

2 8.2. Задача "О почтовой посылке": найти  ее максимальный объем при ограничении на обхват и длину. 
Постановка (формализация задачи): 
s=xyz->max 
и ограничения: 
x+2y+2z < 72, 
0< x,y,z. 
Задача является смешанной. ЦФ s  -нелинейная, а область ограничений - линейная. Область ограничений - многогранник, ограниченный координатными плоскостями x,y,z и плоскостью x/72+y/36+z/36=1. Т.к. значения x,y,z должны быть больше нуля и точка, определяющая максимум ЦФ, должна лежать на поверхности многогранника, то заключаем, что положения точки, обеспечивающей максимум ЦФ, возможны на грани многогранника ограничений . 
8.2.1. Задаем ЦФ и ограничения  в геометрической интерпретации dok0.mac 
8.2.2. Осуществляем перебор линий в области ограничений dok.mac 
8.2.3. Осуществляем перебор точек в области ограничений dok1.mac 
8.2.4. Икомые размеры  х, у, z  посылки будут в текущих регистрах при выходе из МК, в случае достижения  максимума ЦФ (см. рис. 8.2.4) 
Контрольные вопросы
 
 
 
 

Рис.8.2.3 
Рис.8.2.4 
 
 

3 8.3. Задача Тартальи. Из чисел 0<x,y<90 найти Fmax=x*y*(y-x) 
8.3.1. Формируем исходые данные tart0.mac, задав массив изменения точек отрезком прямой: 
x/90+y/90=1. 
8.3.2. Формируем цикл, вычисляем максимум ЦФ, строим график ЦФ: tart0.mac 
8.3.3. Определяем исходные числа в текущих регистрах при втором запуске МК, поставив условие: при достижения  максимума ЦФ выйти (см. рис. 8.3.3) 
Контрольные вопросы
Рис.8.3.2 
Рис.8.3.3 
ПРИМЕР
4 7.4. Пусть задана ЦФ 
F=20.*x+15.*y+10.*z -> max 
и область ограничений 
12x+6y+10z<=60 
5x+10y+8z<=40 
3x+5y+10z<=30 
 x, y,z >=0 
Найти максимум ЦФ. 
Решение. Известно, что решение находится в одной из вершин многограника ограничений. Требуется найти эти вершины, и последовательно подставляя их координаты  в ЦФ найти ее максимальное значение. Для поиска искомых вершин можно воспользоваться аналитическими уравнениями (см. МК: lin2.mac и lin3.mac). 
7.4.1. Задание исходных данных и определение координат восьми вершин области ограничений в МК mlin.mac.  ЦФ F изображена на рис. 7.4.1. 
7.4.2. mgd.log   -  протокол работы МК mlin.mac  и в mgd.txt 
В итоге (после работы МК mlin.mac) получены 8 вершин и вычислены значения ЦФ F: 
p1=0 , 2.66667 , 1.66667 (F =56.6667) 
p2=3.33333 , 0 , 2  (F =86.6667) 
p3=4 , 2 , 0   (F =110) 
p4=5 , 0 , 0   (F =100) 
p5=0 , 4 , 0    (F =60) 
p6=0 , 0 , 3   (F =30) 
p7=3.19066 , 1.28405 , 1.40078  (F =97.0817) 
p8=0.,0.,0.  (F=0.) 
В точке p3 ЦФ имеет максимум. 
Решение данной задачи легко решается и графически, однако из-за неточностей графических построений, можно легко взять не ту вершину, как наиболее близлежащую к плоскости ЦФ (при ее константе). 
Рис.7.4.1 
 
 
 
 
 
 
 
 
 

 
 

Базовые макрокоманды
Язык системы Вектор (краткая подсказка)
Использование клавиатуры при работе в “Вектор”
Использование клавиатуры при редактировании текста в DOS



 

linpr0.mac
otrezok : p101=0.,0. p102=0.,180. $ ось Ox
otrezok: p101=0.,0. p102=160.,0. $ ось Oy
otrezok : p101=100.,0.  p102=0.,170. $ ограничение x/100.+y/170.=1.
otrezok : p101=140.,0. p102=0.,120. $ ограничение x/140.+y/120.=1.
linpr1: x=0.   y=2.5
 

linpr1.mac
y  > 120. ? exit
x90=(1.-(y/170.))*100.
x91=(1.-(y/120.))*140.
linpr2: x=0.
linpr1 : y=y+5.0

linpr2.mac
x91 > x90 ? goto met
x >  x91 ? exit
goto met2
$ met
x > x90 ? exit
$ met2
okr : p100=p s100=2.5
linpr2: x=x+5.0



linmd0.mac
otrezok : p101=0.,0. p102=0.,250.  $ ось Ox
otrezok: p101=0.,0. p102=250.,0. $ ось Oy
otrezok: p101=140.,0.  p102=0.,170. $ x/140.+y/170.=1.
otrezok: p101=190.,0. p102=0.,120. $ x/190.+y/120.=1.
otrezok: p101=200.,0. p102=0.,200. $ ЦФ x+y=200.
: p103=140.,140.      $  начальная точка для ЦФ: f=x+y
linmd: x=0. y=0. s=0.  s98=0.

linmd.mac
s > 1.01 ? exit
y=s*120.0   $ перебор y в диапазоне 0.-120
x90=(1.-(y/170.))*140. $ расчет абсцисс на области ограничений
x91=(1.-(y/120.))*190. $ то же самое, но на другом ребре
x91 > x90 ? goto met
x=x91
goto met2
$ met
x=x90
$ met2
$ строим точки на границе выпуклого множества
okr: p100=x,y s100=2.5 $ точки на границе выпуклого многогранника
s9=x+y
s9 > s98 ? s98=s9
otrezok: p101=p103 p102=x,s9 $ график ЦФ: f=x+y
p103=p102
linmd : s=s+0.05


Контрольные вопросы

1. Что является абсциссой ЦФ? Что ординатой?
2. В каком диапазоне происходит изменение абсциссы ЦФ? Ординаты ЦФ?
3. В каком параметре отыскивается максимум ЦФ?
4. В какой переменной формируется ЦФ?
5. Дайте геометрическую интепретацию  ЦФ: F=x+y=200


dok0.mac
: p1=72.,0.,0. p2=0.,36.,0.  p3=0.,0.,36.  p4=p3
otrezok : p101=p1 p102=p3
otrezok : p101=p2 p102=p4
dok: s=0. s12=0.  p105=x1, 0. s98=0.
$ s98max=3429.22

dok.mac
s > 1.001 ? exit  $ МК перебора линий в области ограниченй
p91=(1.-s)*p1+s*p3
p92=(1.-s)*p2 +s*p4
otrezok: p101=p91 p102=p92
dok1 : s1=0. p105=p91 $ к МК перебора точек на линиях
$ n50<>3429 ? exit
dok : s=s+0.1

dok1.mac
s1 > 1.001 ? exit
p=(1.-s1)*p91+s1*p92  $  перебор точек на границе области ограничений
s11=x*y*z   $ вычисление объема посылки при разных x,y,z
otrezok:  p101=p105  p102=x, s11/30.+z   $ график ЦФ
p105=p102   $  конец в начлало
s11 > s98 ?  s98=s11  $ максимум посылки в s98
n50=s98 $  максимум переводим в целое число, знаки после запятой не учитываем
$ n50 <> 3429 ? exit $ выход при втором запуске для определения x,y,z
dok1 : s1=s1+0.1


Контрольные вопросы

1. Что является абсциссой ЦФ? Что ординатой?
2. В каком диапазоне происходит изменение абсциссы ЦФ? Ординаты ЦФ?
3. В каком параметре отыскивается максимум ЦФ?
4. В какой переменной формируется ЦФ?
5. Что нужно сделать в МК, чтобы определить размеры посылки при ее максимальном объеме?


tart0.mac
$ Задача Тартальи: из чисел 0<x,y<90 найти Fmax=xy(y-x)
: p1=90.,0. p2=0.,90.  $ так можно представить ограничения точками
otrezok : p101=p1 p102=p2 $  и соответственно отрезком
tart1: s=0.   s11=0.  p99= x1, 0. s98=0.
$ В итоге Fmax(в s99)=69984 при x=72, y=18
$ Проверка
s10=72.*18.(18.-72.)

tart1.mac
s11 > 1.00 ? exit
p=(1.-s11)*p1+s11*p2            $ перебор точек на ограничении
s=x*y*(x-y)                     $ вычисление мах/min
otrezok: p101=p99 p102=x,y+s/700. $ график ЦФ
p99=p102
s < s99 ? s99=s
s > s98 ?  s98=s                $ сравнение и выбор
n50=s98
$ n50  <> 69984 ? exit          $ при 2-м запуске МК
tart1: s11=s11+0.05 p105=p102   $ рекурсия


Контрольные вопросы

1. Что является абсциссой ЦФ? Что ординатой?
2. В каком диапазоне происходит изменение абсциссы ЦФ? Ординаты ЦФ?
3. В каком параметре отыскивается максимум ЦФ?
4. В какой переменной формируется ЦФ?
5. Что нужно сделать в МК, чтобы определить цифры, чтобы их произведение на их расность было максимальном? Минимальным?

mlin.mac
$ Магадан  задана ЦФ
$ F=20.*x+15.*y+10.*z -> max
$ и область ограничений
$ 12x+6y+10z<=60
$ print$on
5x+10y+8z<=40
$ 3x+5y+10z<=30
$ x>=0
$ y>=0
$ z>=0
$ Определяем вершины многогранника ограничений
$ Одна вершина определяется в пересечении первых 3-х плоскостей
$ Определим ее с помощью  lin3
$ пересечение 3-х плоскостей
: s1=12. s2=6. s3=10. s4=60.     $ a1  b1 c1 d1
: s11=5. s12=10. s13=8. s14=40.  $ a2  b2 c2 d2
: s21=3. s22=5. s23=10. s24=30.  $ a3  b3 c3 d3
print$off
lin3
print$on
$ проверка
s91=s1*x+s2*y+s3*z
s92=s11*x+s12*y+s13*z
s93=s21*x+s22*y+s23*z
$ ЦФ
p7=p
s107=20.*x+15.*y+10.*z
$ пересечение при х=0
:  s1=10. s2=8.  s3=40.  $ a2  b2 c2 d2
:  s11=5. s12=10. s13=30.  $ a3  b3 c3 d3
print$off
lin2
print$on
z=y
y=x
x=0.
$ проверка
: s1=12. s2=6. s3=10. s4=60.     $ a1  b1 c1 d1
: s11=5. s12=10. s13=8. s14=40.  $ a2  b2 c2 d2
: s21=3. s22=5. s23=10. s24=30.  $ a3  b3 c3 d3
$ проверка
s91=s1*x+s2*y+s3*z
s92=s11*x+s12*y+s13*z
s93=s21*x+s22*y+s23*z
$ ЦФ
p1=p
s101=20.*x+15.*y+10.*z

$ пересечение при y=0
:  s1=12. s2=10.  s3=60.  $ a2  b2 c2 d2
:  s11=3. s12=10. s13=30.  $ a3  b3 c3 d3
print$off
lin2
print$on
z=y
x=x
y=0.
$ проверка
: s1=12. s2=6. s3=10. s4=60.     $ a1  b1 c1 d1
: s11=5. s12=10. s13=8. s14=40.  $ a2  b2 c2 d2
: s21=3. s22=5. s23=10. s24=30.  $ a3  b3 c3 d3
s91=s1*x+s2*y+s3*z
s92=s11*x+s12*y+s13*z
s93=s21*x+s22*y+s23*z
$ ЦФ
p2=p
s102=20.*x+15.*y+10.*z

$ fore
$ пересечение при z=0
:  s1=12. s2=6.  s3=60.  $ a2  b2 c2 d2
:  s11=5. s12=10. s13=40.  $ a3  b3 c3 d3
print$off
lin2
print$on
$ проверка
: s1=12. s2=6. s3=10. s4=60.     $ a1  b1 c1 d1
: s11=5. s12=10. s13=8. s14=40.  $ a2  b2 c2 d2
: s21=3. s22=5. s23=10. s24=30.  $ a3  b3 c3 d3
z=0.
s91=s1*x+s2*y+s3*z
s92=s11*x+s12*y+s13*z
s93=s21*x+s22*y+s23*z
$ ЦФ
p3=p
s103=20.*x+15.*y+10.*z
$  Проверим еще для трех вершин
: x=5.  y=0. z=0.
s91=s1*x+s2*y+s3*z
s92=s11*x+s12*y+s13*z
s93=s21*x+s22*y+s23*z
$ ЦФ
p4=p
s104=20.*x+15.*y+10.*z
: x=0.  y=4. z=0.
s91=s1*x+s2*y+s3*z
s92=s11*x+s12*y+s13*z
s93=s21*x+s22*y+s23*z
$ ЦФ
p5=p
s105=20.*x+15.*y+10.*z
: x=0.  y=0. z=3.
s91=s1*x+s2*y+s3*z
s92=s11*x+s12*y+s13*z
s93=s21*x+s22*y+s23*z
$ ЦФ
p6=p
s106=20.*x+15.*y+10.*z
$ строим график ЦФ всех 8 вершин  в плоскости xs (s-ЦФ)
s=10.
ck
otrezok: p101=s*x1,s101 p102=s*x5,s105
otrezok: p101=s*x3,s103
otrezok: p102=s*x4,s104
otrezok: p101=s*x2,s102
otrezok: p102=s*x6,s106
otrezok: p101=s*x1,s101
otrezok: p102=s*x7,s107
otrezok: p101=s*x2,s102
otrezok: p101=s*x7,s107 p102=s*x3,s103
otrezok: p101=s*x8,s108 p102=s*x5,s105
otrezok: p102=s*x6,s106
otrezok: p102=s*x4,s104
okr : p100=s*x3,s103 s100=4.
$ exit
$ строим график ЦФ всех 8 вершин в плоскости ys (s-ЦФ)
s=10.
ck
otrezok: p101=s*y1,s101 p102=s*y5,s105
otrezok: p101=s*y3,s103
otrezok: p102=s*y4,s104
otrezok: p101=s*y2,s102
otrezok: p102=s*y6,s106
otrezok: p101=s*y1,s101
otrezok: p102=s*y7,s107
otrezok: p101=s*y2,s102
otrezok: p101=s*y7,s107 p102=s*y3,s103
otrezok: p101=s*y8,s108 p102=s*y5,s105
otrezok: p102=s*y6,s106
otrezok: p102=s*y4,s104
okr : p100=s*y3,s103
$ строим график ЦФ всех 8 вершин в плоскости zs (s-ЦФ)
s=10.
ck
otrezok: p101=s*z1,s101 p102=s*z5,s105
otrezok: p101=s*z3,s103
otrezok: p102=s*z4,s104
otrezok: p101=s*z2,s102
otrezok: p102=s*z6,s106
otrezok: p101=s*z1,s101
otrezok: p102=s*z7,s107
otrezok: p101=s*z2,s102
otrezok: p101=s*z7,s107 p102=s*z3,s103
otrezok: p101=s*z8,s108 p102=s*z5,s105
otrezok: p102=s*z6,s106
otrezok: p102=s*z4,s104
okr : p100=s*z3,s103 s100=4.


lin2.mac
$ Точка пересечения 2-х прямых
$ a1*x+b1*y=d1
$ a2*x+b2*y=d2
$  входные данные - коэффициенты 2-х уравнений
$  выходные - координаты точки p  пересечения
$ : s1=10. s2=8. s3=40.       $ a1  b1 d1
$ : s11=5. s12=10. s13=30.    $ a2  b2 d2
: s31=(s2/s1)-(s12/s11)
: s32=(s3/s1)-(s13/s11)
y=s32/s31
x=(s3-s2*y)/s1


lin3.mac
$ Точка пересечения 3-х плоскостей заданных уравнениями
$ a1*x+b1*y+c1*z=d1
$ a2*x+b2*y+c2*z=d2
$ a3*x+b3*y+c3*z=d3
$  входные данные - коэффициенты 3-х уравнений
$  p - выходные - координаты точки  пересечения
$ : s1=12. s2=6. s3=10. s4=60.     $ a1  b1 c1 d1
$ : s11=5. s12=10. s13=8. s14=40.  $ a2  b2 c2 d2
$ : s21=3. s22=5. s23=10. s24=30.  $ a3  b3 c3 d3
: s31=(s2/s1)-(s12/s11)          $ l1
: s32=(s3/s1)-(s13/s11)          $ f1
: s33=(s4/s1)-(s14/s11)          $ g1
: s41=(s12/s11)-(s22/s21)        $ l2
: s42=(s13/s11)-(s23/s21)        $ f2
: s43=(s14/s11)-(s24/s21)        $ g2
s51=(s32/s31)-(s42/s41)          $ m
s52=(s33/s31)-(s43/s41)          $ n
z=s52/s51
y=(s33/s31)-(s32/s31)*z
x=(s4-s2*y-s3*z)/s1
 
 
 



 

Mgd.log   -  протокол работы МК mlin.mac
Печать макротекста включена
$ Магадан  задана ЦФ
$ F=20.*x+15.*y+10.*z -> max
$ и область ограничений
$ 12x+6y+10z<=60
$ 5x+10y+8z<=40
$ 3x+5y+10z<=30
$ x>=0
$ y>=0
$ z>=0
$ Определяем вершины многогранника ограничений
$ Одна вершина определяется в пересечении первых 3-х плоскостей
$ Определим ее с помощью  lin3
$ пересечение 3-х плоскостей
: s1=12. s2=6. s3=10. s4=60.     $ a1  b1 c1 d1
: s11=5. s12=10. s13=8. s14=40.  $ a2  b2 c2 d2
: s21=3. s22=5. s23=10. s24=30.  $ a3  b3 c3 d3
print$off
Печать макротекста выключена
ЗHAЧEHИE=5.71111
ЗHAЧEHИE=8
ЗHAЧEHИE=1.40078
ЗHAЧEHИE=1.28405
ЗHAЧEHИE=3.19066
Печать макротекста включена
$ проверка
s101=s1*x+s2*y+s3*z
ЗHAЧEHИE=60
s102=s11*x+s12*y+s13*z
ЗHAЧEHИE=40
s103=s21*x+s22*y+s23*z
ЗHAЧEHИE=30
$ ЦФ
s100=20.*x+15.*y+10.*z
ЗHAЧEHИE=97.0817
$ пересечение при х=0
:  s1=10. s2=8.  s3=40.  $ a2  b2 c2 d2
:  s11=5. s12=10. s13=30.  $ a3  b3 c3 d3
print$off
Печать макротекста выключена
ЗHAЧEHИE=1.66667
ЗHAЧEHИE=2.66667
Печать макротекста включена
z=y
ЗHAЧEHИE=1.66667
y=x
ЗHAЧEHИE=2.66667
x=0.
ЗHAЧEHИE=0
$ проверка
: s1=12. s2=6. s3=10. s4=60.     $ a1  b1 c1 d1
: s11=5. s12=10. s13=8. s14=40.  $ a2  b2 c2 d2
: s21=3. s22=5. s23=10. s24=30.  $ a3  b3 c3 d3
$ проверка
s101=s1*x+s2*y+s3*z
ЗHAЧEHИE=32.6667
s102=s11*x+s12*y+s13*z
ЗHAЧEHИE=40
s103=s21*x+s22*y+s23*z
ЗHAЧEHИE=30
$ ЦФ
p
ЗHAЧEHИE=0 , 2.66667 , 1.66667
s100=20.*x+15.*y+10.*z
ЗHAЧEHИE=56.6667

$ пересечение при y=0
:  s1=12. s2=10.  s3=60.  $ a2  b2 c2 d2
:  s11=3. s12=10. s13=30.  $ a3  b3 c3 d3
print$off
Печать макротекста выключена
ЗHAЧEHИE=2
ЗHAЧEHИE=3.33333
Печать макротекста включена
z=y
ЗHAЧEHИE=2
x=x
ЗHAЧEHИE=3.33333
y=0.
ЗHAЧEHИE=0
$ проверка
: s1=12. s2=6. s3=10. s4=60.     $ a1  b1 c1 d1
: s11=5. s12=10. s13=8. s14=40.  $ a2  b2 c2 d2
: s21=3. s22=5. s23=10. s24=30.  $ a3  b3 c3 d3
s101=s1*x+s2*y+s3*z
ЗHAЧEHИE=60
s102=s11*x+s12*y+s13*z
ЗHAЧEHИE=32.6667
s103=s21*x+s22*y+s23*z
ЗHAЧEHИE=30
$ ЦФ
p
ЗHAЧEHИE=3.33333 , 0 , 2
s100=20.*x+15.*y+10.*z
ЗHAЧEHИE=86.6667

$ fore
$ пересечение при z=0
:  s1=12. s2=6.  s3=60.  $ a2  b2 c2 d2
:  s11=5. s12=10. s13=40.  $ a3  b3 c3 d3
print$off
Печать макротекста выключена
ЗHAЧEHИE=2
ЗHAЧEHИE=4
Печать макротекста включена
$ проверка
: s1=12. s2=6. s3=10. s4=60.     $ a1  b1 c1 d1
: s11=5. s12=10. s13=8. s14=40.  $ a2  b2 c2 d2
: s21=3. s22=5. s23=10. s24=30.  $ a3  b3 c3 d3
z=0.
ЗHAЧEHИE=0
s101=s1*x+s2*y+s3*z
ЗHAЧEHИE=60
s102=s11*x+s12*y+s13*z
ЗHAЧEHИE=40
s103=s21*x+s22*y+s23*z
ЗHAЧEHИE=22
$ ЦФ
p
ЗHAЧEHИE=4 , 2 , 0
s100=20.*x+15.*y+10.*z
ЗHAЧEHИE=110
$  Проверим еще для трех вершин
: x=5.  y=0. z=0.
s101=s1*x+s2*y+s3*z
ЗHAЧEHИE=60
s102=s11*x+s12*y+s13*z
ЗHAЧEHИE=25
s103=s21*x+s22*y+s23*z
ЗHAЧEHИE=15
$ ЦФ
s100=20.*x+15.*y+10.*z
ЗHAЧEHИE=100
: x=0.  y=4. z=0.
s101=s1*x+s2*y+s3*z
ЗHAЧEHИE=24
s102=s11*x+s12*y+s13*z
ЗHAЧEHИE=40
s103=s21*x+s22*y+s23*z
ЗHAЧEHИE=20
$ ЦФ
s100=20.*x+15.*y+10.*z
ЗHAЧEHИE=60
: x=0.  y=0. z=3.
s101=s1*x+s2*y+s3*z
ЗHAЧEHИE=30
s102=s11*x+s12*y+s13*z
ЗHAЧEHИE=24
s103=s21*x+s22*y+s23*z
ЗHAЧEHИE=30
$ ЦФ
s100=20.*x+15.*y+10.*z
ЗHAЧEHИE=30



mgd.txt
Печать макротекста включена
$ Магадан  задана область ограничений
$ 12x+6y+10z<=60
$ 5x+10y+8z<=40
$ 3x+5y+10z<=30
$ x>=0
$ y>=0
$ z>=0
$ Определяем вершины многогранника ограничений
$ Одна вершина определяется в пересечении первых 3-х плоскостей
$ Определим ее с помощью  lin3
$ пересечение 3-х плоскостей
: s1=12. s2=6. s3=10. s4=60.     $ a1  b1 c1 d1
: s11=5. s12=10. s13=8. s14=40.  $ a2  b2 c2 d2
: s21=3. s22=5. s23=10. s24=30.  $ a3  b3 c3 d3
lin3
$ проверка
s91=s1*x+s2*y+s3*z
ЗHAЧEHИE=60
s92=s11*x+s12*y+s13*z
ЗHAЧEHИE=40
s93=s21*x+s22*y+s23*z
ЗHAЧEHИE=30
$ ЦФ
p7=p
ЗHAЧEHИE=3.19066 , 1.28405 , 1.40078
s107=20.*x+15.*y+10.*z
ЗHAЧEHИE=97.0817
$ пересечение при х=0
:  s1=10. s2=8.  s3=40.  $ a2  b2 c2 d2
:  s11=5. s12=10. s13=30.  $ a3  b3 c3 d3
lin2
$ проверка
: s1=12. s2=6. s3=10. s4=60.     $ a1  b1 c1 d1
: s11=5. s12=10. s13=8. s14=40.  $ a2  b2 c2 d2
: s21=3. s22=5. s23=10. s24=30.  $ a3  b3 c3 d3
s91=s1*x+s2*y+s3*z
ЗHAЧEHИE=32.6667
s92=s11*x+s12*y+s13*z
ЗHAЧEHИE=40
s93=s21*x+s22*y+s23*z
ЗHAЧEHИE=30
$ ЦФ
p1=p
ЗHAЧEHИE=0 , 2.66667 , 1.66667
s101=20.*x+15.*y+10.*z
ЗHAЧEHИE=56.6667

$ пересечение при y=0
:  s1=12. s2=10.  s3=60.  $ a2  b2 c2 d2
:  s11=3. s12=10. s13=30.  $ a3  b3 c3 d3
lin2
: s1=12. s2=6. s3=10. s4=60.     $ a1  b1 c1 d1
: s11=5. s12=10. s13=8. s14=40.  $ a2  b2 c2 d2
: s21=3. s22=5. s23=10. s24=30.  $ a3  b3 c3 d3
s91=s1*x+s2*y+s3*z
ЗHAЧEHИE=60
s92=s11*x+s12*y+s13*z
ЗHAЧEHИE=32.6667
s93=s21*x+s22*y+s23*z
ЗHAЧEHИE=30
$ ЦФ
p2=p
ЗHAЧEHИE=3.33333 , 0 , 2
s102=20.*x+15.*y+10.*z
ЗHAЧEHИE=86.6667
$ пересечение при z=0
:  s1=12. s2=6.  s3=60.  $ a2  b2 c2 d2
:  s11=5. s12=10. s13=40.  $ a3  b3 c3 d3
lin2
$ проверка
: s1=12. s2=6. s3=10. s4=60.     $ a1  b1 c1 d1
: s11=5. s12=10. s13=8. s14=40.  $ a2  b2 c2 d2
: s21=3. s22=5. s23=10. s24=30.  $ a3  b3 c3 d3
z=0.
ЗHAЧEHИE=0
s91=s1*x+s2*y+s3*z
ЗHAЧEHИE=60
s92=s11*x+s12*y+s13*z
ЗHAЧEHИE=40
s93=s21*x+s22*y+s23*z
ЗHAЧEHИE=22
$ ЦФ
p3=p
ЗHAЧEHИE=4 , 2 , 0
s103=20.*x+15.*y+10.*z
ЗHAЧEHИE=110
$  Проверим еще для трех вершин
: x=5.  y=0. z=0.
s91=s1*x+s2*y+s3*z
ЗHAЧEHИE=60
s92=s11*x+s12*y+s13*z
ЗHAЧEHИE=25
s93=s21*x+s22*y+s23*z
ЗHAЧEHИE=15
$ ЦФ
p4=p
ЗHAЧEHИE=5 , 0 , 0
s104=20.*x+15.*y+10.*z
ЗHAЧEHИE=100
: x=0.  y=4. z=0.
s91=s1*x+s2*y+s3*z
ЗHAЧEHИE=24
s92=s11*x+s12*y+s13*z
ЗHAЧEHИE=40
s93=s21*x+s22*y+s23*z
ЗHAЧEHИE=20
$ ЦФ
p5=p
ЗHAЧEHИE=0 , 4 , 0
s105=20.*x+15.*y+10.*z
ЗHAЧEHИE=60
: x=0.  y=0. z=3.
s91=s1*x+s2*y+s3*z
ЗHAЧEHИE=30
s92=s11*x+s12*y+s13*z
ЗHAЧEHИE=24
s93=s21*x+s22*y+s23*z
ЗHAЧEHИE=30
$ ЦФ
p6=p
ЗHAЧEHИE=0 , 0 , 3
s106=20.*x+15.*y+10.*z
ЗHAЧEHИE=30
$ строим график ЦФ всех 8 вершин  в плоскости xs (s-ЦФ)
 
 
 
 

Язык системы "Вектор" /кратко/

Переменные хранятся в:
n-n199 - целые числа;
s-s199 - вещественные;
p(x,y,z) - p199 (х-x199, y- y199, z - z199) - типа “точка” (вектора).
Операции: + сложение; - вычитание; * умножение; / деление, = присвоение

Операторы:  ? - условный "если" /ставится после условия /; exit - выход.

Операции: <> - равенство;  > - больше; < - меньше; &  - и; ! - или; ^ - не.

Функции: sin - синус; cos - косинус; tan - тангенс, sqrt - кв. корень.

Директивы:  print$on/off - включить/выключить печать в mgd.log.

Вызов МК: имя МК: список присвоений. Если МК начинается с n, s, p, x, y, z, то при ее вызове перед именем МК ставится (без пробела) символ $.

Комментарии ставится после символа $ с пробелом.



 

Использование клавиатуры при работе в “Вектор”:

enter - ввод команд -строк,

alt+c - вызов командной строки,

alt+s - очистка экрана от рисунков,
alt+M - удаление/восстановление меню,

alt+j - включить/выключить джойстик,

Esc - выход из подсостояний и из системы (подтвердить “y”).


Использование клавиатуры при редактировании текста в DOS

enter - вставить строку (если курсор стоит вначале строки),

enter - переместить все, что за курсором, на новую строку,

Delete - операция, обратная предыдущей, если курсор в конце строки, Delete -  удаление  символа, стоящего после курсора,

Backspase -  удаление впередистоящего символа,

Ctrl+y  удаление непустой строки,

Delete - удаление пустой строки,