profile * x0
在你的代码里
“ValueError:操作数无法与形状(131,)(200,)”一起广播。”。
x_t
onoff_t * xon_t
onoff_t
=0或1
0.3 <= xon_t <= 1
每次
t
在里面
0 .. T
?
T = 5
有2^5种可能
onoff
sum 0:T w_t * onoff_t * xon_t
具有固定权重函数
w_t
是微不足道的:
w_t <= 0
:
onoff_t = 0
,关
w_t > 0
:
onoff_t = 1
,开,和
xon_t = 1
如果
进一步限制为只切换两次,0。。。1... 0...,
那么可能的序列数就足够小,可以全部尝试,
沿线:
def pulse_generator( T=200, minwidth=5 ):
""" -> arrays of T floats, 0... 1... 0... """
for t0 in xrange( 1, T ):
for t1 in xrange( t0 + minwidth, T ):
pulse = np.zeros( T )
pulse[t0:t1] = 1
yield pulse
for pulse in pulse_generator( T ):
print "pulse:", pulse
optimize myfunction( pulse * xon ), 0.3 <= xon <= 1
(一个给定的时间有多少这样的脉冲
T
?
见维基百科
Stars and bars
--
太棒了。)
bang-bang control
非常
一个程序(mer)可以花很多时间抖动,在噪声中。
-
把时间0:T分成10段,运行所有2^10=1024个开关序列
-
将边缘移动半步,T/20。
谷歌“离散优化”多重网格。。。和
Grid search