Changeset 606 for branches


Ignore:
Timestamp:
12/06/12 17:42:32 (3 years ago)
Author:
mmckerns
Message:

added issolution and error method to penalty

Location:
branches/decorate
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/decorate/penalty.py

    r605 r606  
    1313    _f = [lambda x:0.] # decorated function 
    1414    _y = [] # stored results 
     15    def error(x): 
     16        rms = condition(x, *args, **kwds)**2 
     17        if hasattr(_f[0], 'error'): rms += _f[0].error(x)**2 
     18        return rms**0.5 
    1519    def iter(i=None): 
    1620        if i is None: _n[0] += 1 
     
    4347        func.clear = clear 
    4448        func.stored = stored 
     49        func.error = error 
    4550        return func 
    4651    return dec 
     
    5964    _f = [lambda x:0.] # decorated function 
    6065    _y = [] # stored results 
     66    def error(x): 
     67        rms = condition(x, *args, **kwds)**2 
     68        if hasattr(_f[0], 'error'): rms += _f[0].error(x)**2 
     69        return rms**0.5 
    6170    def iter(i=None): 
    6271        if i is None: _n[0] += 1 
     
    8998        func.clear = clear 
    9099        func.stored = stored 
     100        func.error = error 
    91101        return func 
    92102    return dec 
     
    105115    _f = [lambda x:0.] # decorated function 
    106116    _y = [] # stored results 
     117    def error(x): 
     118        rms = max(0., condition(x, *args, **kwds))**2 
     119        if hasattr(_f[0], 'error'): rms += _f[0].error(x)**2 
     120        return rms**0.5 
    107121    def iter(i=None): 
    108122        if i is None: _n[0] += 1 
     
    135149        func.clear = clear 
    136150        func.stored = stored 
     151        func.error = error 
    137152        return func 
    138153    return dec 
     
    153168    _f = [lambda x:0.] # decorated function 
    154169    _y = [] # stored results 
     170    def error(x): 
     171        rms = max(0., condition(x, *args, **kwds))**2 
     172        if hasattr(_f[0], 'error'): rms += _f[0].error(x)**2 
     173        return rms**0.5 
    155174    def iter(i=None): 
    156175        if i is None: _n[0] += 1 
     
    186205        func.clear = clear 
    187206        func.stored = stored 
     207        func.error = error 
    188208        return func 
    189209    return dec 
     
    202222    _f = [lambda x:0.] # decorated function 
    203223    _y = [] # stored results 
     224    def error(x): 
     225        rms = max(0., condition(x, *args, **kwds))**2 
     226        if hasattr(_f[0], 'error'): rms += _f[0].error(x)**2 
     227        return rms**0.5 
    204228    def iter(i=None): 
    205229        if i is None: _n[0] += 1 
     
    232256        func.clear = clear 
    233257        func.stored = stored 
     258        func.error = error 
    234259        return func 
    235260    return dec 
     
    249274    _f = [lambda x:0.] # decorated function 
    250275    _y = [] # stored results 
     276    def error(x): 
     277        rms = max(0., condition(x, *args, **kwds))**2 
     278        if hasattr(_f[0], 'error'): rms += _f[0].error(x)**2 
     279        return rms**0.5 
    251280    def iter(i=None): 
    252281        if i is None: _n[0] += 1 
     
    288317        func.clear = clear 
    289318        func.stored = stored 
     319        func.error = error 
    290320        return func 
    291321    return dec 
     
    305335    _f = [lambda x:0.] # decorated function 
    306336    _y = [] # stored results 
     337    def error(x): 
     338        rms = condition(x, *args, **kwds)**2 
     339        if hasattr(_f[0], 'error'): rms += _f[0].error(x)**2 
     340        return rms**0.5 
    307341    def iter(i=None): 
    308342        if i is None: _n[0] += 1 
     
    343377        func.clear = clear 
    344378        func.stored = stored 
     379        func.error = error 
    345380        return func 
    346381    return dec 
     
    384419 
    385420 
     421def issolution(penalty, candidate, tol=1e-3): 
     422    """check if the candidate is a solution to penalty constraints 
     423 
     424penalty: a penalty function 
     425candidate: a candidate solution 
     426    """ 
     427    if penalty.error(candidate) <= tol: return True 
     428    return False 
     429 
     430#XXX: nice if penalty.error could give error for each condition... or total 
     431 
    386432 
    387433# EOF  
  • branches/decorate/test_restarts.py

    r605 r606  
    11#!/usr/bin/env python 
    2 from mystic.constraints import issolution 
    32from restarts import sumt 
    43from penalty import * 
     
    65random_seed(123) 
    76 
    8 def test_sumt1(): 
     7def test_sumt1(verbose=False): 
    98 
    109    def constraint1(x): 
     
    2524    0.25*x1**2 + 0.75*x2**2 - 1. <= 0. 
    2625        """ 
    27     print "constraints equations:%s" % (constraints_string.rstrip(),) 
     26    if verbose: 
     27        print "constraints equations:%s" % (constraints_string.rstrip(),) 
    2828 
    2929    def costfunc(x): 
     
    4343    solver.SetPenalty(penalty) 
    4444    term = VTR() 
    45     end_solver = sumt(costfunc, solver, term, disp=True) 
     45    end_solver = sumt(costfunc, solver, term, disp=verbose) 
    4646    soln = end_solver.Solution() 
    47     print "final answer:", soln 
    48     print "constraints satisfied:", issolution(constraints_string, soln) 
    49     print "expected: [1., 1.]", "\n" 
     47    satisfied = issolution(penalty, soln) 
     48    if verbose:  
     49        print "final answer:", soln 
     50        print "constraints satisfied:", satisfied 
     51        print "expected: [1., 1.]", "\n" 
     52    else: assert satisfied 
    5053 
    51 def test_sumt2(): 
     54 
     55def test_sumt2(verbose=False): 
    5256    def constraint1(x): 
    5357        x1,x2,x3 = x[0],x[1],x[2] 
     
    7377    (x1-10.)**2 + (x2+1.)**2 < 50.  
    7478    """ 
    75     print "constraints equations:%s" % (constraints_string.rstrip(),) 
     79    if verbose: 
     80        print "constraints equations:%s" % (constraints_string.rstrip(),) 
    7681 
    7782    def costfunc(x): 
     
    8893    solver.SetPenalty(penalty) 
    8994    term = VTR() 
    90     end_solver = sumt(costfunc, solver, term, disp=True) 
     95    end_solver = sumt(costfunc, solver, term, disp=verbose) 
    9196    soln = end_solver.Solution() 
    92     print "final answer:", soln 
    93     print "constraints satisfied:", issolution(constraints_string, soln) 
    94     print "expected: [ 6.25827968  4.999961    5.20662288]", "\n" 
     97    satisfied = issolution(penalty, soln) 
     98    if verbose: 
     99        print "final answer:", soln 
     100        print "constraints satisfied:", satisfied 
     101        print "expected: [ 6.25827968  4.999961    5.20662288]", "\n" 
     102    else: assert satisfied 
     103 
    95104 
    96105if __name__ == '__main__': 
Note: See TracChangeset for help on using the changeset viewer.