- •Содержание:
- •Цель работы и требования задания
- •Описание метода поиска
- •Спецификация программы.
- •Спецификация функций.
- •Результаты тестирования программы.
- •Ответы на контрольные вопросы.
- •Какие методы применяются при поиске глобального минимума?
- •В чем идея методов случайного поиска и в чем отличие методов случайного поиска от остальных методов нулевого порядка?
- •В чем отличие метода случайного поиска с возвратом при неудачном шаге от метода lPτ-поиска?
- •Каким образом можно равномерно покрыть область пробными точками?
- •Текст программы
- •Блок схема
Санкт-Петербургский Государственный Электротехнический Университет «ЛЭТИ»
Кафедра САПР
ОТЧЕТ
по лабораторной работе №10
«Исследование алгоритмов случайного поиска»
вариант № 8
факультет КТИ
группа 3371
студент Кондратьев В.
преподаватель: Муранов И.
Санкт-Петербург 2006
Содержание:
1) Цель работы ……………………………………………………….3
2) Описание метода оптимизации…………………………………...3
3) Спецификация программы………………………………………..4
4) Спецификация функций…………………………………………..5
5) Результаты тестирования программы……………………………5
6) Ответы на контрольные вопросы………………………………....6
7)Текст программы…………………………………………………...7
8)Укрупненная блок схема программы……………………………..13
7) Выводы……………………………………………………………..15
Цель работы и требования задания
Цель работы – разработка программы многомерной минимизации целевых функций на основе применения метода поиска с возвратом при неудачном шаге.
–12x2 + 4x12 + 4x22 – 4x1x2 |
(1; 0) |
(1; 2) |
(2x12 + 3x22)exp(x12 – x22) (функция не унимодальна) |
(1; 0.5) |
(0; 0) |
Описание метода поиска
Идея: Организация итерационного процесса xk+1=xk+ak*pk где pk генерируется нормированием случайного вектора. Точки, полученные по этой формуле лежат на гиперсфере с радиусом ak
Начальный этап:
Выбрать начальную точку: X1 , ak ,
J – счетчик неудачных испытаний на каждой итерации.
M – максимальное число неудачно выполненных испытаний (3*n)
b = (2-10)-коэффициент дробления
z – пробная точка, генерируемая на каждой итерации и расположенная на гиперсфере
Основной этап:
1)Получить случайный нормированный вектор pk= ek /|| ek ||
2)Найти пробную точку zk= xk+ ak* pk
3)Проверить критерий удачного испытания
Если y(zk)<y(xk) , то испытание удачное
к++
ak+1 =ak перейти на шаг 2
иначе перейти на шаг 4
4)Оценить число неудачных шагов и проверить КОП
J++
Если j<M то
Перейти на шаг 1
иначе
проверить КОП
если ak< е = 10-6 то stop минимум найден
иначе
ak =ak/b
j=1;
перейти на шаг 1
Спецификация программы.
Программа минимизирует заданную функцию методом проекций Заутендийка.
Глобальные переменные:
class vec //Класс вектор
{
public:
vec(int i1 = 5); //Конструктор
~vec(); //Деструктор
int Vn; //Размерность вектора
double *x;
vec operator +(const vec &x); //Сложение векторов
vec operator -(const vec &x); //Вычитание векторов
void operator =(const vec &x); //Операция присваивания
vec operator *(double a); //Умножение вектора на скаляр
vec operator /(double a); //Деление вектора на скаляр
vec operator /(vec x); //Поэлементное деление векторов
double operator *(const vec &x); //Скалярное произведение векторов
};
class matrix //Класс матриц
{
public:
int Mn; //Размерность матрицы
vec *M;
matrix(int i1 = 5);
~matrix();
vec operator *(const vec &x); //Произведение матрицы и вектора
matrix operator *(double a); //Умножение матрицы на скаляр
matrix operator +(const matrix &A); //Сложение матриц
matrix operator -(const matrix &A); //Вычитание матриц
matrix operator /(double a); //Поэлементное деление матрицы на число
matrix Tr(void); //Транспонирование матрицы
};
int num; //Число переменных в функции
int fun; //Номер минимизируемой функции
int k; //Счетчик числа итераций
double al[3]={0,0,0}; //Массив для хранения коэффициента «а»: x2=x1+a*p;
