Example #1
0
File: admm.py Project: marchon/phd
class ADMM(Job):
    def map_reader(fd, url, size, params):
        i = Task.id
        z = params.z
        yi = params.y[i] + params.rho * (params.x[i] - z)
        for A, b in iter:
            xi = argmin(fi(x) + dot(yi, x - z) + (params.rho / 2.) * dot(x - z, x - z))
            yield str(i), (xi, yi)

    def reduce(iter, params):
        for n, (i, (xi, yi)) in enumerate(iter):
            zhat += xi + yi / float(params.rho)
        yield zhat / n

# first run a job to put records into A, b format
# and also calculate a first z

if __name__ == '__main__':
    params = Params(rho=1., z=0., objective=)

    while True:
        job = ADMM()
        results = job.wait()
        z = old_z
        params.z = list(RecordIter(job.results()))[0]
        if params.rho * sqrt(n) * pnorm(z - params.z, p=2) <= eta_conv:
            if sum(dot(xi - params.z, xi - params.z)
                   for xi, yi in RecordIter(results)) <= (eta_feas ** 2):
                break