我不知道什么x.d <= delta手段,但我就认为它应该是x <= delta。
可以使用投影梯度方法或加速投影梯度方法(这是投影梯度方法,其中“神奇”收敛速度更快的只是轻微的修改)解决了这个问题。这里有一些python代码展示了如何最小化.5 ||斧 - B ||^2受约束0 < = X < =使用FISTA,这是一个加速的投影梯度方法增量。关于投影梯度方法和FISTA的更多细节可以在例如在近端算法Boyd的manuscript找到。
import numpy as np
import matplotlib.pyplot as plt
def fista(gradf,proxg,evalf,evalg,x0,params):
# This code does FISTA with line search
maxIter = params['maxIter']
t = params['stepSize'] # Initial step size
showTrigger = params['showTrigger']
increaseFactor = 1.25
decreaseFactor = .5
costs = np.zeros((maxIter,1))
xkm1 = np.copy(x0)
vkm1 = np.copy(x0)
for k in np.arange(1,maxIter+1,dtype = np.double):
costs[k-1] = evalf(xkm1) + evalg(xkm1)
if k % showTrigger == 0:</