Package snobfit :: Module softConstraint

Source Code for Module snobfit.softConstraint

  1  """ 
  2  softConstraint Class 
  3   
  4  Usage 
  5  ----- 
  6  Usage:  c = softConstraint() 
  7          
  8   
  9  History: 
 10  ------- 
 11  1) Ziwen Fu. 01/08/2009 
 12   
 13  """ 
 14  __docformat__ = "restructuredtext en" 
 15   
 16  import numpy 
 17   
 18   
 19  # ----------------------------------------------------------------- 
20 -class SoftConstraint:
21 """ 22 SoftConstraint Class 23 """
24 - def __init__(self, F=None, Flo = 0, Fhi = numpy.inf, sigma=1.25):
25 self.F = F 26 self.Flo = Flo 27 self.Fhi = Fhi 28 self.sigmaLo = sigma 29 self.sigmaHi = sigma
30
31 - def delta(self, x):
32 Fx = self.F(x) 33 if Fx < self.Flo: 34 return (Fx - self.Flo)/self.sigmaLo 35 elif Fx > self.Fhi: 36 return (Fx - self.Fhi)/self.sigmaHi 37 else: 38 return 0
39
40 - def getFx(self,x):
41 return self.F(x)
42 43 44 45 # -----------------------------------------------------------------
46 -class SoftConstraints:
47 """ 48 SoftConstraints Class 49 """
50 - def __init__(self):
51 self.C = []
52
53 - def add(self, c):
54 self.C.append(c)
55
56 - def r(self,x):
57 m = len(self.C) 58 delta = 0 59 for i in xrange(m): 60 delta += self.C[i].delta(x)**2 61 return delta
62
63 - def F(self,x):
64 Fs = numpy.zeros( len(self.C) ) 65 for i in xrange(len(self.C)): 66 Fs[i] = self.C[i].getFx(x) 67 return Fs
68
69 - def F1(self):
70 F1s = numpy.zeros( len(self.C) ) 71 for i in xrange(len(self.C)): 72 F1s[i] = self.C[i].Flo 73 return F1s
74
75 - def F2(self):
76 F2s = numpy.zeros( len(self.C) ) 77 for i in xrange(len(self.C)): 78 F2s[i] = self.C[i].Fhi 79 return F2s
80
81 - def sigmaLo(self):
82 s = numpy.zeros( len(self.C) ) 83 for i in xrange(len(self.C)): 84 s[i] = self.C[i].sigmaLo 85 return s
86
87 - def sigmaHi(self):
88 s = numpy.zeros( len(self.C) ) 89 for i in xrange(len(self.C)): 90 s[i] = self.C[i].sigmaHi 91 return s
92 93 94 95 # ------------------------------------------------------------
96 -def hsc18_1(x):
97 return x[0]*x[1] - 25
98
99 -def hsc18_2(x):
100 return x[0]**2 + x[1]**2 - 25
101 102 if __name__ == '__main__': 103 s = SoftConstraints() 104 s.add( SoftConstraint( F=hsc18_1, Flo=0, Fhi=numpy.inf) ) 105 s.add( SoftConstraint( F=hsc18_2, Flo=0, Fhi=numpy.inf) ) 106 print s.C 107 print len(s.C) 108 print s.r( [1,1] ) 109 print s.F( [1,1] ) 110 print s.F1( ) 111 print s.F2( ) 112