Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
4
Добавлен:
01.05.2014
Размер:
147 Кб
Скачать
☆

Санкт-Петербургский Государственный Электротехнический Университет «ЛЭТИ»

Кафедра САПР

ОТЧЕТ

по лабораторной работе №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;

Соседние файлы в папке Лабораторная работа №10