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

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

Спасибо

★★

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

anonymous
()

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

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

anonymous
()

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

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