Python 其中包含一个公共变量的分布式优化
我不熟悉优化技术,对我的方法有疑问 假设我有一个代理,它试图优化3个变量C1、x11、x12以最小化功耗。我有60个这样的代理,它们构成了一个系统。所有这些代理都可以归为一个类别,C1作为所有代理的公共变量。因此agent2在C1、x21、x22上进行优化。C1、x31、x32等上的代理3 我尝试过使用组合方法进行优化,其中优化器在(C1、x11、x12、x21、x22、x31、x32…)上进行优化 如果代理的数量较少,则它是可行的,但随着代理数量的增加,If在计算上变得昂贵且不可行 如果我尝试单独优化每个代理,每个代理都会给出不同的C1,这是所有代理的一个公共变量。但是,由于C1是所有代理的一个公共变量,因此所有代理都应该协调并具有一个公共值 有人能帮忙解决他的问题吗。对于我的用例来说,这是一个更好的方法 我目前正在使用scipy差分进化算法 联合进近代码Python 其中包含一个公共变量的分布式优化,python,optimization,distributed-computing,multi-agent,scipy-optimize,Python,Optimization,Distributed Computing,Multi Agent,Scipy Optimize,我不熟悉优化技术,对我的方法有疑问 假设我有一个代理,它试图优化3个变量C1、x11、x12以最小化功耗。我有60个这样的代理,它们构成了一个系统。所有这些代理都可以归为一个类别,C1作为所有代理的公共变量。因此agent2在C1、x21、x22上进行优化。C1、x31、x32等上的代理3 我尝试过使用组合方法进行优化,其中优化器在(C1、x11、x12、x21、x22、x31、x32…)上进行优化 如果代理的数量较少,则它是可行的,但随着代理数量的增加,If在计算上变得昂贵且不可行 如果我尝试
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
的约束
像wise一样,我有多个函数`,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是所有函数的一个变量
像wise f4、f5…f60一样,约束为g4、g5、g6
我的最终目标是最小化f1,f2,f3…f60的总和
i、 e
最小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
如果需要进一步澄清,请告诉我。您能写下您的优化问题吗?遵循这个逻辑:您可以提供一个数据集,或者使用公共数据集来描述问题吗?对优化问题的澄清也会有所帮助添加详细的优化问题@pv8添加详细的优化问题@user7440787
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