рдЬреВрд▓рд┐рдпрд╛ рдФрд░ рдХрдгреЛрдВ рдХрд╛ рдЭреБрдВрдб


рд╣рдо рдмрд╣реБрдЖрдпрд╛рдореА рдЕрдиреБрдХреВрд▓рди рдХреЗ рддрд░реАрдХреЛрдВ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВ , рдФрд░ рдЕрдЧрд▓реА рдкрдВрдХреНрддрд┐ рдореЗрдВ рдХрдг рдЭреБрдВрдб рд╡рд┐рдзрд┐ рд╣реИ, рдЬреЛ рд╡реИрд╢реНрд╡рд┐рдХ рдиреНрдпреВрдирддрдо рдЦреЛрдЬ рдХрд░рддрд╛ рд╣реИред


рд╕рд┐рджреНрдзрд╛рдВрдд



рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ:



рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдордп рдкрд░ рдкреНрд░рддреНрдпреЗрдХ рдХрдг рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдЧрдгрдирд╛ рд╕реВрддреНрд░ рджреНрд╡рд╛рд░рд╛ рдХреА рдЬрд╛рддреА рд╣реИ:


Vi,t+1=AcVi,t+Cprp(piтИТxi,t)+Cgrg(giтИТxi,t)


xi,t+1=xi,t+Vi,t+1


рдЬрд╣рд╛рдБ pi- рдПрдХ рд╡рд┐рд╢реЗрд╖ рдХрдг рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдХрд╛ рд╕рдордиреНрд╡рдп, gi- рдЗрд╕ рдпреБрдЧ рдХреЗ рд▓рд┐рдП рд╕рднреА рдХрдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдХрд╛ рд╕рдордиреНрд╡рдп, CpрдФрд░ Cg- рд╡рдЬрди рдХрд╛рд░рдХ (рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рдЪрдпрдирд┐рдд), AcрдЬрдбрд╝рддрд╛ рдХрд╛ рдЧреБрдгрд╛рдВрдХ рд╣реИ, рдЗрд╕реЗ рдПрдХ рдпреБрдЧ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдлрд┐рд░ рдХрдг рд╡реЗрдЧ рдЖрд╕рд╛рдиреА рд╕реЗ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ред


рдкрд░реАрдХреНрд╖рдг рдХрд╛рд░реНрдп


рдЪреВрдВрдХрд┐ рд╡рд┐рдзрд┐ рдХреЗ рдХрд╛рдо рдХреЛ рджреЗрдЦрдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЕрдзрд┐рдХ рдкрд░реАрдХреНрд╖рдг рдХрд╛рд░реНрдп рдХрд░рдиреЗ рд╣реЛрдВрдЧреЗ:


рджреВрд░ рд▓реЗ рдЬрд╛рдпрд╛ рдЧрдпрд╛
parabol(x) = sum(u->u*u, x) # f(0,0) = 0, x_i тИИ [-10,10] shvefel(x) = sum(u-> -u*sin(sqrt(abs(u))), x) # f(420.9687,420.9687) = -819?, x_i тИИ [-500,500] rastrigin(x) = 10*length(x) + sum(u->u*u-10*cos(2*pi*u), x) # f(0,0) = 0, x_i тИИ [-5,5] ekly(x) = -20exp(-0.2sqrt(0.5(x[1]*x[1]+x[2]*x[2]))) - exp(0.5(cospi(2x[1])+cospi(2x[2]))) + 20 + тДп # f(0,0) = 0, x_i тИИ [-5,5] rosenbrok(x) = 100(x[2]-x[1]*x[1])^2 + (x[1]-1)^2 # f(0,0) = 0, x_i тИИ [-5,5] bill(x) = (1.5-x[1]+x[1]*x[2])^2 + (2.25-x[1]+x[1]*x[2]*x[2])^2 + (2.625-x[1]+x[1]*x[2]^3)^2 # f(3,0.5) = 0, x_i тИИ [-5,5] boot(x) = (x[1]+2x[2]-7)^2 + (2x[1]+x[2]-5)^2 # f(1,3) = 0, x_i тИИ [-10,10] bukin6(x) = 100sqrt(abs(x[2]-0.01x[1]*x[1])) + 0.01abs(x[1]+10) # f(-10,1) = 0, x_i тИИ [-15,-5; -3,3] levy13(x) = sinpi(3x[1])^2 + (1+sinpi(3x[2])^2)*(x[1]-1)^2 + (1+sinpi(2x[2])^2)*(x[2]-1)^2 # f(1,1) = 0, x_i тИИ [-10,10] himmelblau(x) = (x[1]^2+x[2]-11)^2 + (x[1]+x[2]^2-7)^2 # f(3,2)... = 0, x_i тИИ [-5,5] camel3humped(x) = 2x[1]^2 - 1.05x[1]^4 + x[1]^6 /6 + x[1]*x[2] + x[2]^2 # f(0,0) = 0, x_i тИИ [-5,5] izom(x) = -cos(x[1])*cos(x[2])*exp(-( (x[1]-pi)^2 + (x[2]-pi)^2 )) # f(╧А,╧А) = -1, x_i тИИ [-100,100] holdertable(x) = -abs(sin(x[1])*cos(x[2])exp(abs( 1-sqrt(x[1]^2+x[2]^2)/pi ))) # f(┬▒8.05502,┬▒9.66459) = -19.2085, x_i тИИ [-10,10] shaffer4(x) = 0.5 + (cos(sin(abs(x[1]^2-x[2]^2)))^2-0.5) / (1+0.001(x[1]^2+x[2]^2))^2 # f(0,1.25313) = 0.292579, x_i тИИ [-100,100] 

рдФрд░, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕реНрд╡рдпрдВ MRC:


 function mdpso(; nparts = 50, ndimes = 2, ages = 50, #   lover = [-10 -10], upper = [10 10], C1 = [1.9 1.9], #  - C2 = [1.8 1.8], Ac = [0.1 0.1], ) minind = 0 V = zeros(nparts,ndimes) #   n  n X = zeros(nparts,ndimes) funmin = -Inf Fmin = Inf Fbest = fill(Fmin, nparts) funx = zeros(nparts) xmem = zeros(nparts,ndimes) xbest = zeros(ndimes) #   #      for i in 1:nparts, j in 1:ndimes X[i,j] = randomer(lover[j], upper[j]) end for i in 1:ages for j in 1:nparts funx[j] = fun(X[j,:]) if funx[j] < Fbest[j] Fbest[j] = funx[j] xmem[j,:] = X[j,:] end end #      ploter(lover, upper, X, funx, i); funmin = minimum(funx) minind = argmin(funx) if funmin < Fmin Fmin = funmin xbest[:] = X[minind,:] end for j in 1:nparts, k in 1:ndimes R1 = rand() R2 = rand() V[j,k] = Ac[k]*V[j,k] + C1[k]*R1*(xmem[j,k] - X[j,k]) + C2[k]*R2*(xbest[k] - X[j,k]) X[j,k] += V[j,k] end println("Age тДЦ $i\n xbest:\n $(xbest[1]) $(xbest[2])") println("Fmin: $Fmin\n") end f = open("$fun.txt","w") #      write(f,"C1 = $C1, C2 = $C2, Ac = $Ac, lower = $lover, upper = $upper, ages = $ages, parts = $nparts") close(f) end 

рдЖрд░реЗрдЦрдг рдХреЗ рд╕рд╛рде, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЧрдгрдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдкреВрд░реНрд╡рд╡рд░реНрддреА рд╣реИ:


 using Plots pyplot() function ploter(l, u, xy, z, n_age ) contour(Xs, Ys, Zs, fill = true); #    (   ) #   ,       scatter!(xy[:,1], xy[:,2], legend = false, xaxis=( (l[1], u[1])), yaxis=( (l[2], u[2])) ); #savefig("$fun $n_age.png") #        end fun = bill low = [-4 -4] up = [4 4] Xs = range(low[1], stop = up[1], length = 80) Ys = range(low[2], stop = up[2], length = 80) Zs = [ fun([xy]) for y in Ys, x in Xs ] surface(Xs, Ys, Zs) xaxis!( (low[1], up[1]), low[1]:(up[1]-low[1])/5:up[1] ) yaxis!( (low[2], up[2]), low[2]:(up[2]-low[2])/5:up[2] ) 


 mdpso(C1 = [1.2 1.2], C2 = [1.1 1.1], Ac = [0.08 0.08], lower = [-4 -4], upper = [4 4], ages = 30) 


 fun = ekly mdpso(C1 = [1.7 1.7], C2 = [1.7 1.7], Ac = [0.07 0.07], lower = [-5 -5], upper = [5 5], ages = 15) 



 fun = himmelblau mdpso(C1 = [1.1 1.1], C2 = [1.0 1.0], Ac = [0.09 0.09], lower = [-5 -5], upper = [5 5], ages = 20, parts = 50) 



 fun = holdertable mdpso(C1 = [1.1 1.1], C2 = [1.0 1.0], Ac = [0.09 0.09], lower = [-10 -10], upper = [10 10], ages = 20, parts = 50) 



 fun = levy13 mdpso(C1 = [1.1 1.1], C2 = [1.0 1.0], Ac = [0.09 0.09], lower = [-10 -10], upper = [10 10], ages = 20, parts = 50) 



 fun = shaffer4 mdpso(C1 = [1.1 1.1], C2 = [1.0 1.0], Ac = [0.09 0.09], lower = [-100 -100], upper = [100 100], ages = 20, parts = 50) 



рдХреНрдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдбрд┐рдкреНрд░реЗрд╢рди рдорд╛рдкрджрдВрдбреЛрдВ рдФрд░ рдпрд╛рджреГрдЪреНрдЫрд┐рдХрддрд╛ рдХреЗ рдПрдХ рддрддреНрд╡ рдХреЗ рд╕рд╛рде рдЙрдкрджреНрд░рд╡ рдХрд░ рд░рд╣рд╛ рд╣реИ: рдпрджрд┐ рд╡реИрд╢реНрд╡рд┐рдХ рдиреНрдпреВрдирддрдо рдХреЗ рдкрд╛рд╕ рдПрдХ рдХрдг рдирд╣реАрдВ рдЙрдбрд╝рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдкреВрд░реА рдЪреАрдЬ рд╕реНрдерд╛рдиреАрдп рдореЗрдВ рдЧрд┐рд░ рд╕рдХрддреА рд╣реИ:


 fun = rastrigin mdpso(mdpso(C1 = [0.1 0.1], C2 = [1 1], Ac = [0.08 0.08], lover = low, upper = up, ages = 30)) 



рд╣рд╛рдБ, рдФрд░ рдкреБрд░рд╛рдирд╛ рдмрд╣реБрдд рдирд╣реАрдВ рдЕрдЪреНрдЫрд╛ рд░реЛрд╕реЗрдирдмреНрд░реЛрдХ рдЕрднреА рднреА рдЦреБрдж рдХреЛ рд╕рдордЭрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ:


 fun = rosenbrok mdpso(C1 = [1.7 1.7], C2 = [1.5 1.5], Ac = [0.15 0.15], lover = low, upper = up, ages = 20, nparts = 50) ... Age тДЦ 20 xbest: 0.37796421341886866 0.12799160066705667 Fmin: 0.409026370833564 



рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдХрд╣рд╛ рдерд╛, рдЖрдк рд╡реИрд╢реНрд╡рд┐рдХ рдиреНрдпреВрдирддрдо рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫреЗ рд╕рдиреНрдирд┐рдХрдЯрди рдХреА рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП FDM рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ, Nelder-Mead:


рд╕рд┐рдВрдкреНрд▓реЗрдХреНрд╕ рд╡рд┐рдзрд┐
 vecl(x) = sqrt( sum(u -> u*u, x) ) function sortcoord(Mx) N = size(Mx,2) f = [fun(Mx[:,i]) for i in 1:N] #     Mx[:, sortperm(f)] end function normx(Mx) m = size(Mx,2) D = zeros(m-1,m) for i = 1:m, j = i+1:m D[i,j] = vecl(Mx[:,i] - Mx[:,j]) #     end D sqrt(maximum(D)) end function ofNelderMid(; ndimes = 2, ╬╡ = 1e-4, fit = [.1, .1], low = [-1 -1], up = [1 1]) k = 0 N = ndimes Xx = zeros(N, N+1) for i = 1:N+1 Xx[:,i] = fit end for i = 1:N Xx[i,i] += 0.5*vecl(fit) + ╬╡ end p = normx(Xx) while p > ╬╡ k += 1 Xx = sortcoord(Xx) Xo = [ sum(Xx[i,1:N])/N for i = 1:N ] #  - i-  Ro = 2Xo - Xx[:,N+1] FR = fun(Ro) if FR > fun(Xx[:,N+1]) for i = 2:N+1 Xx[:,i] = 0.5(Xx[:,1] + Xx[:,i]) end else if FR < fun(Xx[:,1]) Eo = Xo + 2(Xo - Xx[:,N+1]) if FR > fun(Eo) Xx[:,N+1] = Eo else Xx[:,N+1] = Ro end else if FR <= fun(Xx[:,N]) Xx[:,N+1] = Ro else Co = Xo + 0.5(Xo - Xx[:,N+1]) if FR > fun(Co) Xx[:,N+1] = Co else Xx[:,N+1] = Ro end end end end println(k, " ", p, " ", Xx[:,1]) p = normx(Xx) end #while fit = Xx[:,1] end 

 ofNelderMid(fit = [0.37796 0.127992]) ... 92 0.00022610400555036366 [1.0, 1.0] 93 0.00015987967588703512 [1.0, 1.0] 94 0.00011305200343052599 [1.0, 1.0] 2-element Array{Float64,1}: 0.9999999996645973 0.9999999995466575 

рд╢рд╛рд╕реНрддреНрд░реАрдп рдПрдордПрдлрд╕реА рдХреЗ рд▓рд┐рдП, рд╕рдм рдХреБрдЫ рд░реЛрдХ рдорд╛рдкрджрдВрдб рдХреЗ рд╕рд╛рде рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ: рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдмрд┐рдВрджреБ рдХрдИ рдпреБрдЧреЛрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдкрдХрдбрд╝ рд╕рдХрддрд╛ рд╣реИ, рдХреБрдЫ рдХрдгреЛрдВ рдХреЗ рдмреАрдЪ рдХреА рджреВрд░реА рднреА рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдирд╣реАрдВ рдмрджрд▓ рд╕рдХрддреА рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпреБрдЧреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рдПрдХ рд╕реАрдорд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡реИрд╢реНрд╡рд┐рдХ рдиреНрдпреВрдирддрдо рдЦреЛрдЬрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрдгреЛрдВ рдФрд░ рдпреБрдЧреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЬреЛ рд╕реНрдореГрддрд┐ рдФрд░, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рдордп (рдХреЛрдИ рдордЬрд╝рд╛рдХ рдирд╣реАрдВ, рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрд░ рдкреНрд░рддреНрдпреЗрдХ рдЖрдпрд╛рдо рдХреЗ рд▓рд┐рдП рдЙрджреНрджреЗрд╢реНрдп рдлрд╝рдВрдХреНрд╢рди рдХреА 50 рдХреЙрд▓) рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдмрд╣реБрдд рдорд╣рдВрдЧрд╛ рд╣реИред


рдиреИрддрд┐рдХрддрд╛


  • рдпрджрд┐ рдЖрдк рдЬрдЯрд┐рд▓ рдФрд░ рдЖрдзреБрдирд┐рдХ рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╕рд░рд▓ рд╡рд┐рдзрд┐ рд░рдЪрдирд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
  • рдЕрдХреНрд╕рд░ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреАрд░реНрдг рд░реВрдк рд╕реЗ рддреАрдХреНрд╖реНрдг рд╡рд┐рдзрд┐ рд╣реЛрддреА рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЦрд╛рд░рд╛ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП)
  • рд▓рдЧрд╛рддрд╛рд░ рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП рд╣рд╛рде рдкрд░ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдПрдордУ рд╣реЛрдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреА рдЬрд╛рддреА рд╣реИред
  • рдЕрдкрдиреЗ рдХрд╛рд░реНрдп рдХреЛ рд╡рд┐рдзрд┐ рдореЗрдВ рд░рдЦрдирд╛ рдФрд░ рд╕рд╣реА рдЙрддреНрддрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣рдореЗрд╢рд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ - рдЖрдкрдХреЛ рд╢реЛрдз рдореЗрдВ рд╕рдордп рд╡реНрдпрддреАрдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрджрд┐ рдЖрдк рд░рд╛рд╣рдд рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЕрднрд┐рд╕рд░рдг рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдо рд╕реЗ рдХрдо рдордзреНрдпрд╡рд░реНрддреА рдЧрдгрдирд╛ рдХрд╛ рдкреНрд░рд┐рдВрдЯ рдЖрдЙрдЯ рд▓реЗрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЖрдЬ рдХреЗ рд▓рд┐рдП рдмрд╕ рдЗрддрдирд╛ рд╣реА, рдЖрдкрдХреЗ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдФрд░ рдЖрдк рд╕рднреА рдХреЛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЕрдиреБрдХреВрд▓рди рдЪрд╛рд╣рд┐рдП!

Source: https://habr.com/ru/post/hi440234/


All Articles