Род Стивенс

Книги → Delphi. Готовые алгоритмы → Глава 8. Деревья решений

Сначала величина Т должна быть довольно высокой, поэтому величина Р = 1 / Ехр(Е / (к * Т)) также достаточно велика. Иначе случайных изменений не будет. Через какое-то время значение Т постепенно снижается, и вероятность случайных изменений уменьшается. Как только процесс достиг точки, в которой никакие из­менения не смогут улучшить решение и значение Т станет настолько мало, что случайные изменения будут очень редкими, алгоритм закончит работу.

Для задачи формирования портфеля инвестиций энергия Е - это величина, на которую сокращается прибыль в результате изменения. Например, если вы удаля­ете позицию, прибыль которой равна 10 млн долларов, и заменяете ее позицией, имеющей прибыль в 7 млн, добавленная к системе энергия будет равна 3.

Обратите внимание, что если величина Е велика, то вероятность Р = 1 / Ехр(Е / (к * Т)) небольшая, - поэтому вероятность больших изменений ниже.

Метод отжига в программе Неиг устанавливает константу k 1. Значение Т изначально задается равным 0,75, умноженным на разность между максимальной и минимальной прибылью от возможных вариантов инвестиций. После выполне­ния определенного числа случайных изменений температура Т уменьшается умно­жением на постоянную 0,8.

// Одновременное изменение к элементов для улучшения испытательного

// решения.

// Если это дает улучшение, сохраняем изменение.

// В противном случае сохраняем изменение с некоторой вероятностью.

// После max_slips таких безусловных сохранений уменьшаем t.

// После тах_ипсЬапдёб несохраненных изменений останавливаемся.

procedure THeurform.AnnealTrial(k, max_unchanged, maxslips : Integer);

const

TFACTOR = 0.8;

var

i, removal, num_unchanged, min\_slips : Integer;

max_profit, mirt_profit : Integer; save_changes, slipped : Boolean;

, t : Single;

begin

// Нахождение максимальной и минимальной прибыли. max_profit := Items[l].Profit; '

min_profit := max_profit; for i := 2 to Numltems do begin

if (max_profit < Items [i] . Profit) then max_j?rofit := Items[i]. Profit; if (min_profit > Items[i].Profit) then min_profit := Items[i]. Profit;

end;

// Инициализация t.

t := 0.75 * (max_profit - min_profit);

← предыдущая следующая →

Страницы раздела: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29

Публикация компанией Dropbox кода Zulip – средства общения для IT-разработчиков

20.11.2015
Одной из одобрительно встреченных программистами инициатив, реализующихся в рамках акции Hack Week, стала публикация исходного кода приложения Zulip – веб-приложения для общения между собой разработчиков в сфере IT-технологий.

Объединение ОС Android и Chrome

17.11.2015
Слухи об объединении двух крупнейших ОС компании Google, Android и Chrome, гуляют по Интернету уже более 5 лет, но до сих пор этого не случилось, хотя очевидно, что с течением времени эти ОС становятся всё более похожими: так, в последнее время появилось немало Android-устройств, к которым прилагаются клавиатуры, а Chrome OS «научилась» работать с сенсорными экранами.

Конференция Linux Piter 2015

15.11.2015
Уже почти через неделю в Санкт-Петербурге впервые в истории пройдёт конференция, посвящённая проблемам свободного программного обеспечения – Linux Piter 2015.