LINUX.ORG.RU

Привести переменные к общему диапазону.


0

0


Стоит задача: оптимизировать проблему при помощи генетического алгоритма в матлабе. Как я понимаю из документации, данный алгоритм реализован так, что началные значения и распределение (distribution) рандомальных изминений (мутаций) предполагают приблизительно одинаковый диапазон значений всех переменных (степеней свободы).
Проблема в том, что задача задана при помощи 4-х переменных, три из которых обычно принимают значения от 1 до ~10-20, а одна переменная - от 4000 до ~15000. Как лучше всего привести значения четвертой переменной к диапазону 1-20?

Самый простой способ - делить на 4000. Но в этом случае диапазон получится слишком узким.

Значит делаем так:

> function f = factor (value, k, v)
> max1=(max(v)/max(k));
> min1=(min(v)/min(k));
> d= (value - min(v))/(max(v)-min(v));
> f=min1+(max1-min1)*d;
> end

value - значение, которое надо подогнать к диапазону
k - вектор возможных значений переменной с диапазоном 1-20
v - вектор возможных значений переменной с диапазоном 4000 - 15000
функция возвращает фактор на который надо множить value

Упустил ли я что-то? Есть ли способы лучше?

Спасибо

★★

Re: Привести переменные к общему диапазону.

у мну вот так:
Y = (Data[GraphPosition]-DiapMin) / ((DiapMax-DiapMin)/Height);

anonymous ()

Re: Привести переменные к общему диапазону.

>данный алгоритм реализован так, что началные значения и распределение (distribution) рандомальных изминений (мутаций) предполагают приблизительно одинаковый диапазон значений всех переменных (степеней свободы)

странное требование. ты уверен, что все правильно понял? можешь описать побробнее?

anonymous ()

Re: Привести переменные к общему диапазону.

Посчитай процент заполнения большей шкалы и примени к меньшей.

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.