哪个是制作MATLAB ga函数的最佳方法,该函数调用模拟软件并可以访问结果?

时间:2016-06-15 23:06:05

标签: matlab optimization genetic-algorithm

我用这个创建了一个简单的遗传算法代码 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应用程序?有什么想法吗?

提前谢谢!

1 个答案:

答案 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)
...

希望这有帮助