我编写了一个主函数,它使用随机优化算法(粒子群优化)来找到 ODE 系统的最优解。我会运行 50 次以确保找到最优的。起初运行正常,但现在我发现计算时间会随着迭代次数的增加而增加。前十次计算花费不到300s,但最后计算会增加到500s。看来每次计算都会多花3~5秒的时间。我已按照高性能提示来优化我的代码,但它不起作用。
抱歉,我之前不太清楚如何上传我的代码,这是我在下面编写的代码。但是在这段代码中,实验数据没有加载,我可能需要想办法上传数据。在 main 函数中,随着i的增加,每次计算的时间成本也在增加。
哦,对了,我还发现了一个有趣的现象。我改变了计算次数,计算时间又变了。主循环前20次计算,每次计算耗时约300秒,内存使用波动较大。但我不知道的事情发生了,它正在加速。每次计算时间减少1/4,约为80s。内存使用量变成了这样的一条直线:
我知道 Julia 会在第一次运行时进行预热,然后加速。但这种情况似乎有所不同。这种情况看起来 Julia 在前 20 次计算中运行缓慢,然后它找到了一个优化内存使用并加快速度的好方法。然后程序就全速运行。
using CSV, DataFrames
using BenchmarkTools
using DifferentialEquations
using Statistics
using Dates
using Base.Threads
using Suppressor
function uniform(dim::Int, lb::Array{Float64, 1}, ub::Array{Float64, 1})
arr = rand(Float64, dim)
@inbounds for i in 1:dim; arr[i] = arr[i] * (ub[i] - lb[i]) + lb[i] end
return arr
end
mutable struct Problem
cost_func
dim::Int
lb::Array{Float64,1}
ub::Array{Float64,1}
end
mutable struct Particle
position::Array{Float64,1}
velocity::Array{Float64,1}
cost::Float64
best_position::Array{Float64,1}
best_cost::Float64
end
mutable struct …Run Code Online (Sandbox Code Playgroud)