我是优化技术的新手,对我的方法有疑问。
考虑我有一个代理试图优化 3 个变量 C1,x11,x12 以最小化功率。我有60个这样的代理构成一个系统。所有这些代理都可以归为一类,C1 是所有代理的公共变量。所以agent2在C1,,x21,x22上进行优化。C1、x31、x32 上的代理 3 等等……
我尝试以组合方法进行优化,其中我的优化器在 (C1,x11,x12,x21,x22,x31,x32...) 上进行优化变得计算昂贵且不可行。
如果我尝试单独优化每个代理,这些代理中的每一个都会给出不同的 C1 ,这是所有代理的公共变量。但是由于 C1 是所有代理的公共变量,所有代理应该协调并具有共同的值。
有人可以帮助解决他的问题。对于我的用例来说,这是一种更好的方法。
我目前正在使用 scipy 差分进化算法代码进行组合方法
from scipy import optimize
bounds = [(15,18),(500,1500),(20,50),(500,1500),(20,50),(500,1500),(20,50),(500,1500),(20,50),(500,1500),(20,50),(500,1500),(20,50) ......]
arguments = [25,25000,24,32500,25,32500,24,22000,23.5,24000,25,42000,25,32500 ....]
start = time.process_time()
res = optimize.differential_evolution(objective,bounds,args=arguments,disp=False)
print('Time taken:' + str(time.process_time() - start))
print('Optimized x values:' + str(res.x))
print('Optimized Fun Value:' + str(res.fun))
个人方法的代码
start = time.process_time()
for i in range(0,61):
arguments = (agr1[i],arg2[i],agent_models[i])
res = optimize.differential_evolution(optimization_distributed,bounds,args=arguments,disp=False)
print('Optimized x values:' + str(res.x))
print('Optimized fun_val:' + str(res.fun))
print('-----------------------------------------------------------------')
print('Time taken:' + str(time.process_time() - start))
我愿意改变我的技术和策略以获得更好的结果。谢谢
在评论中询问:
我有一个函数f1=f1(c1,x11,x12)
要最小化,c1,x11,x12
其值可以在一定范围内变化,以g1(c1,x11,x12) < 0
.
同样,我有多种功能 `, f2,f3...f60 。
f2 可以表示为 f2(c1,x21,x22) 以最小化 c1,x21,x22 的值,这些值可以在确定的范围内变化,前提是 g2(c1,x21,x22) < 0。
f3 可以表示为 f3(c1,x31,x32) 以最小化 c1,x31,x32 的值,这些值可以在确定的范围内变化,前提是 g3(c1,x31,x32) < 0。
所以在这里,如果我们看到 c1 是所有函数的命令变量。
与 f4,f5...f60 一样,约束为 g4,g5,g6..
我的最终目标是最小化 f1,f2,f3...f60 的总和。
IE
min f1(c1,x11,x12) + f2(c1,x21,x22) + f3(c1,x31,x32) + ... + f60(c1,x601,x602)
s.t. g1(c1,x11,x12) < 0
, g2(c1,x21,x22) < 0
,g3(c1,x31,x32) < 0
......
,g601(c1,x601,x602) < 0