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

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

Кафедра САПР

ОТЧЕТ

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

Спецификация программы.

Программа минимизирует заданную функцию методом проекций Заутендийка.

Глобальные переменные:

classvec //Класс вектор

{

public:

vec(inti1 = 5); //Конструктор

~vec(); //Деструктор

int Vn; //Размерность вектора

double *x;

vec operator +(const vec &x); //Сложение векторов

vec operator -(const vec &x); //Вычитание векторов

void operator =(const vec &x); //Операция присваивания

vecoperator*(doublea); //Умножение вектора на скаляр

vecoperator/(doublea); //Деление вектора на скаляр

vecoperator/(vecx); //Поэлементное деление векторов

doubleoperator*(constvec&x); //Скалярное произведение векторов

};

class matrix //Класс матриц

{

public:

int Mn;//Размерность матрицы

vec *M;

matrix(int i1 = 5);

~matrix();

vecoperator*(constvec&x); //Произведение матрицы и вектора

matrix operator *(double a); //Умножение матрицы на скаляр

matrix operator +(const matrix &A); //Сложение матриц

matrix operator -(const matrix &A); //Вычитание матриц

matrixoperator/(doublea); //Поэлементное деление матрицы на число

matrixTr(void); //Транспонирование матрицы

};

intnum; //Число переменных в функции

intfun; //Номер минимизируемой функции

int k; //Счетчик числа итераций

double al[3]={0,0,0}; //Массив для хранения коэффициента «а»: x2=x1+a*p;

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