def reoptimizeW(optState,example): assert(example.params.splParams.splMode == 'CCCP') marginsNew = [] margins = optState.margins FNewtranspose = numpy.asmatrix(numpy.zeros(optState.F.T.shape)) Ftranspose = optState.F.T latents = optState.latents for iteration in range(len(margins)): ybar, hbar = latents[iteration][example.id] contributedMargin = CommonApp.delta(ybar, example.trueY) contributedConstraintGiven = CommonApp.padCanonicalPsi(example.psis()[example.h,:].T, example.trueY, example.params) contributedConstraintHBar = CommonApp.padCanonicalPsi(example.psis()[hbar,:].T, ybar, example.params) FNewtranspose[iteration,:] = (Ftranspose[iteration,:] - (contributedConstraintGiven - contributedConstraintHBar).T) marginsNew.append(margins[iteration]-contributedMargin) FNew = FNewtranspose.T FTF = FNew.T*FNew wNew, objective, gap = SSVM.solveDualQPV2(FTF, FNew,marginsNew,example.params, optState.env,optState.task) return wNew