我用这个创建了一个简单的遗传算法代码 MATLAB遗传算法应用优化工具。
function [x, fval, exitFlag, Output, population, SCORE] = main()
nVar = 1; FF = @opt;
k = 1;
opts = gaoptimset;
opts = gaoptimset(opts,'InitialPopulation',k,'PopulationSize',1);
[x, fval, exitFlag, Output, population, SCORE] = ga(FF,nVar,opts);
function [y] = opt(t)
y = abs( t - 1 );
当我将目标函数作为一个简单的等式进行操作时,我观察到ga运行良好。在每次迭代中,Ι期望目标函数的变量t
被分配给总体的个体k
的值。 但我提到这项任务会自动发生。
我的最终目的是使用这个简单的问题,在等式y = abs( t - 1 )
之前插入一个调用模拟软件的命令。该软件将人口k
的个体作为输入读取并输出变量r
。等式t
的变量y = abs( t - 1 )
被分配给r
。
我想让我让我的模拟软件读取k
的值
手动,因为这发生在前面的例子中自动(t < - k)。
这是可行的使用ga应用程序?有什么想法吗?
提前谢谢!
答案 0 :(得分:1)
您可以使用使用系统调用的外部函数来运行模拟软件并操纵它的输出。
例如:
ga(@(x1)my_external_obj_fn(x1,param1,param2,...),nelements, nvars,A,b,[],[],LB,UB,@my_nonlcon_fn,@my_IntCon_fn,options)
...
并在output = my_external_obj_fn
...
sim_fx = sprintf('your_sim_exec param1 param2... %s > outputfile');
system(sim_fx);
getoutput = sprintf('grep outputfile | sed > out_fitness')
system(getoutput)
fID = fopen(getoutput)
if fID ~= -1
output = textscan(fopen(fx2), '%s');
output = str2double(output)
...
希望这有帮助