为什么我的代码(基于遗传算法optimtool)无法读取值作为输入?

时间:2016-05-11 08:26:42

标签: matlab optimization genetic-algorithm

我正在使用MATLAB optimtool进行遗传算法优化。

我正在打开一个名为'm_0a4'的新脚本 FitnessFunction = @m_0b4;
NumberOfVariables = 1;
[x,fval] = ga(FitnessFunction, numberOfVariables);%Here I minimize the difference y

我正在打开第二个新脚本,命名为'm_0b4' function y = m_0b4(x)
prompt = 'write it down';
i = input(prompt) %the input value
y = x - i; % the variable I want to minimize

functionnn m_0b4请求我输入值'i',然后输入输入,
遗传算法的脚本m_0a4称为'y'。

当我输入值时,MATLAB继续请求我再输入一个值。 当我输入'Enter'时,MATLAB给我带来了一个错误。

分配的非单身rhs尺寸比 非单身人士下标
引起:     用户提供的健身功能评估失败。     GA无法继续。

我无法想象为什么MATLAB不理解我提供输入(例如数字5)。有什么想法吗?

提前谢谢!

2 个答案:

答案 0 :(得分:2)

我认为你应该做的是在致电ga之前要求用户输入一次

为了让您的函数m_0b4考虑此输入,您可以将FitnessFunction声明为1参数的匿名函数:

您的新功能:

function y = m_0b4(x,i)
y = x - i;
end

在主脚本中:

prompt = 'write it down';
i = input(prompt)

% Declare your fitness function that will be executed with the input entered by the user 
FitnessFunction=@(x) m_0b4(x,i);

% Minimize
NumberOfVariables = 1;
[x,fval] = ga(FitnessFunction, NumberOfVariables);

次要说明(主要问题):

当x倾向于无穷大时,你试图最小化的函数趋向于无穷大......

工作示例(允许最低限度的一个)

function y = m_0b4(x,i)
y = abs(x - i);
end

结果:

输入i设置为20(最多100代):

  

x =

     

20.012668610027522

     

fval =

     

0.012668610027522

答案 1 :(得分:1)

我不能说为什么你的代码不起作用,但这里有一个解决方法:

function y = m_0b4(x)
i = input('write it down \n')
y = x - i;