×
 

7.4 Пример использования команды

В качестве примера использования Оптимизации методом Хука-Дживса можно привести расчет дальности полета камня. Камень бросают вверх под различными углами к горизонту с одинаковой скоростью. В момент, когда высота становится равной – 0.001 [m], расчет останавливается (камень упал на землю). Оптимизируемым параметром в данном примере является угол бросания камня (скаляр angle), а критерием – дальность полета камня (датчик dist).
Скаляр angle имеет начальное значение 25 [deg], левая граница – 25 [deg], правая граница – 55 [deg]. Осуществляется поиск угла при котором достигается максимум дальности.
 
Файл проекта
point point1=point( 0 [ m ], 0 [ m ], 0 [ m ] );
solid solid1=sphere( point1, 0.1 [ m ], mass = 1 [ kg ] );
color color1=index( 25 );
body stone=body( color = color1 );
body stone < ( solid1 );
body ground=body( color = RGB( 229, 229, 229 ) );
sensor dist=bodyDisplacement( ground, point1, projectX, stone, point1 );
scalar angle=25 [ deg ];
node node3=node( point1, 0 [ deg ], 0 [ deg ], angle, color = index( 36 ) );
condition condition1=transVelocity( ground, vectorX( node3 ), stone, point1, 6 [m/s] );
gravity gravity1=parallel( reverse( projectY ), g = 9.807 [ m/ s2 ] );
sensor height=bodyDisplacement( ground, point1, projectY, stone, point1 );
reform reform1=stop( );
event event1=reformsBySensor( list( reform1 ), height, -0.001 [ m ] );
command dynamics=constRK4( 2 [s], 0.01 [s], stepOut = 1, minTimeOut = 0 );
command OPT=optimizeHookeJeeves( list( designVariable( angle, 25 [deg], 1 ) ), dist, maximum:, 0.01, 100, dynamics );
 
/\///////////////////////////////////////////////////////////////////////////////////
set ground = ground;
 
/\///////////////////////////////////////////////////////////////////////////////////
/\ Единицы измерения;
set angle = deg;
 
На рис. 12 приведены графики, полученные в результате проведения Оптимизации методом Хука-Дживса.
 
Рис. 12. Результаты Оптимизации методом Хука-Дживса
 
Ниже представлена таблица результатов Оптимизации методом Хука-Дживса (формат TBL).
 
Таблица результатов
 
// Оптимизация методом Хука-Дживса
// Проект: OptHJ.elr
// Команда: OPT
// Результат: I: Расчет успешно завершен, найдена оптимальная точка
5
НомерИтерации []
angle  [deg]
dist  [m]
ЦелеваяФункция []
Критерий оптимальности []
// НомерИтерации angle dist ЦелеваяФункция КритерийОптимальности
1    25.000000 2.814175  -2.814175 0.100000
2    47.918312 3.652721  -3.652721 0.100000
3    42.188734 3.654289  -3.654289 0.100000
4    42.188734 3.654289  -3.654289 0.050000
5    45.053523 3.671838  -3.671838 0.050000
6    45.053523 3.671838  -3.671838 0.025000
7    45.053523 3.671838  -3.671838 0.012500
8    45.053523 3.671838  -3.671838 0.006250
9    45.053523 3.671838  -3.671838 0.003125
10   45.053523 3.671838  -3.671838 0.001563
11   44.963998 3.671845  -3.671845 0.001563
12   44.963998 3.671845  -3.671845 0.000781
 
Из таблицы видно, что оптимальное значение угла бросания камня – 44.963998 [deg], а дальность полета – 3.671845 [m].