2

我是优化技术的新手,对我的方法有疑问。

考虑我有一个代理试图优化 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
4

0 回答 0