gpt4 book ai didi

java - 将Matlab程序转换为Java以提高性能的敏感性

转载 作者:行者123 更新时间:2023-12-02 06:19:28 24 4
gpt4 key购买 nike

他的

我有一个假设性的问题。我们刚刚编写了一些实现遗传算法的代码,以找到数独游戏的解决方案,作为计算智能类(class)项目的一部分。不幸的是,它运行速度非常慢,这限制了我们执行足够数量的运行以找到最佳参数的能力。问题是,将整个代码重新编程(代码基础不是那么大)到 java 中是否是提高软件速度的可行解决方案。就像我们确实需要 10 倍的性能改进一样,我怀疑 Java 版本是否会更快。有什么想法吗?

谢谢

===更新1===

这是计算成本最高的函数的代码。它是一个 GA 适应度函数,它迭代总体(不同的数独板)并计算每行和每列有多少个元素是重复的。参数 n 已传递,当前设置为 9。也就是说,该函数计算一行中有多少个元素在 1 到 9 范围内多次出现。数字越高,董事会的适应度就越低,这意味着它对于下一代来说是一个较弱的候选者。

分析器报告两行调用在 for 循环中相交,导致性能不佳,但我们不知道如何真正优化代码。其内容如下:

function [fitness, finished,d, threshold]=fitness(population_, n)
finished=false;
threshold=false;
V=ones(n,1);
d=zeros(size(population_,2),1);
s=[1:1:n];
for z=1:size(population_,2)
board=population_{z};
t=0;
l=0;
for i=1:n
l=l+n-length(intersect(s,board(:,i)'));
t=t+n-length(intersect(s,board(i,:)));

end
k=sum(abs(board*V-t));

f=t+l+k/50;
if t==2 &&l==2
threshold=true;
end
if f==0
finished=true;
else
fitness(z)=1/f;
d(z)=f;
end
end
end

===更新2===

在这里找到了解决方案:http://www.mathworks.com/matlabcentral/answers/112771-how-to-optimize-the-following-function

使用 histc(V, 1:9),速度快得多:)

最佳答案

如果不查看代码、了解是否使用并行化等,这是不可能说的。事实上,正如 MrAzzaman 所说,分析是要做的第一件事。如果您发现单个瓶颈,尤其是循环较多的情况,则用 C 语言编写该部分并通过 MEX 将其连接到 Matlab 可能就足够了。

在遗传算法中,我相信可以实现 10 倍的速度提升,而不是不能。我不太同意 MrAzzaman 的观点——在某些情况下(for 循环、使用动态对象)比 C/C++/Java 慢得多。这并不是说 Matlab 总是很慢,因为它并非如此,而是有很多算法会很慢。

也就是说,如果你不花太多时间循环,不使用对象,不受 Matlab 数据结构的限制,你可能会觉得 Matlab 没问题。也就是说,如果我用 Java 或 Matlab 编写 GA,我宁愿选择前者(而且我现在使用 Matlab 的次数比 Java 多得多,这不仅仅是习惯问题)。

顺便说一句。如果你不想自己编程,可以看看 JGAP,它是一个对于 GA 来说相当有用的 Java 库。

关于java - 将Matlab程序转换为Java以提高性能的敏感性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21146693/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com