@@ -10,14 +10,14 @@ Class {
1010 #name : #PMGeneralFunctionFit ,
1111 #superclass : #Object ,
1212 #instVars : [
13- ' go' ,
1413 ' manager' ,
1514 ' errorFunction' ,
1615 ' result' ,
1716 ' firstResult' ,
1817 ' verbose' ,
1918 ' data' ,
20- ' dataTruncated'
19+ ' dataTruncated' ,
20+ ' geneticOptimizer'
2121 ],
2222 #category : #' Math-FunctionFit'
2323}
@@ -92,27 +92,31 @@ self resetResult.
9292
9393{ #category : #operation }
9494PMGeneralFunctionFit >> evaluate [
95- |ff |
96- ff := PMErrorMinimizer function: errorFunction.
97- firstResult := [ff evaluate .ff parameters]
98- onErrorDo: [ verbose ifTrue: [self inform: ' ErrorMinimizer was not successful' ]. nil ].
99- firstResult ifNotNil: [go addPointAt: firstResult] .
100- firstResult := go evaluate .
101- self errorType = #squared
102- ifTrue: [ff := PMFunctionFit function: errorFunction function data: errorFunction data ].
103- ff parameters: firstResult.
104- ff desiredPrecision: PMFloatingPointMachine new machinePrecision.
105- ff maximumIterations: 1000 .
106- result: = [ff evaluate .ff parameters]
107- onErrorDo: [
108- verbose ifTrue: [self inform: ' last FunctionFit was not successful' ].
109- ff result parameters].
110- ((errorFunction value: result) > (errorFunction value: firstResult)) ifTrue: [
111- ff: = result.
112- result := firstResult.
113- firstResult := ff.
114- verbose ifTrue: [self inform: ' first result was better than final result' ] ].
115- ^ result
95+
96+ | ff |
97+ ff := PMErrorMinimizer function: errorFunction.
98+ firstResult := [
99+ ff evaluate.
100+ ff parameters ] onErrorDo: [
101+ verbose ifTrue: [ self inform: ' ErrorMinimizer was not successful' ].
102+ nil ].
103+ firstResult ifNotNil: [ geneticOptimizer addPointAt: firstResult ].
104+ firstResult := geneticOptimizer evaluate.
105+ self errorType = #squared ifTrue: [ ff := PMFunctionFit function: errorFunction function data: errorFunction data ].
106+ ff parameters: firstResult.
107+ ff desiredPrecision: PMFloatingPointMachine new machinePrecision.
108+ ff maximumIterations: 1000 .
109+ result := [
110+ ff evaluate.
111+ ff parameters ] onErrorDo: [
112+ verbose ifTrue: [ self inform: ' last FunctionFit was not successful' ].
113+ ff result parameters ].
114+ (errorFunction value: result) > (errorFunction value: firstResult) ifTrue: [
115+ ff := result.
116+ result := firstResult.
117+ firstResult := ff.
118+ verbose ifTrue: [ self inform: ' first result was better than final result' ] ].
119+ ^ result
116120]
117121
118122{ #category : #operation }
@@ -165,16 +169,19 @@ errorFunction function: aBlock
165169
166170{ #category : #initialization }
167171PMGeneralFunctionFit >> initialize [
168- super initialize .
169- errorFunction := PMErrorOfParameterFunction new .
170- manager := PMAnotherChromosomeManager new .
171- manager populationSize: 50 .
172- go := PMAnotherGeneticOptimizer minimizingFunction: errorFunction .
173- go chromosomeManager: manager.
174- go maximumIterations: 170 .
175- self errorType: #squared .
176- verbose: = false .
177- dataTruncated := false
172+
173+ super initialize.
174+ errorFunction := PMErrorOfParameterFunction new .
175+ manager := PMAnotherChromosomeManager new
176+ populationSize: 50 ;
177+ yourself .
178+ geneticOptimizer := (PMAnotherGeneticOptimizer minimizingFunction: errorFunction)
179+ chromosomeManager: manager;
180+ maximumIterations: 170 ;
181+ yourself .
182+ self errorType: #squared .
183+ verbose := false .
184+ dataTruncated := false
178185]
179186
180187{ #category : #accessing }
@@ -186,7 +193,7 @@ PMGeneralFunctionFit >> manager [
186193{ #category : #accessing }
187194PMGeneralFunctionFit >> maximumIterations: anInteger [
188195" default is 170."
189- go maximumIterations: anInteger.
196+ geneticOptimizer maximumIterations: anInteger.
190197^ anInteger
191198]
192199
@@ -207,7 +214,7 @@ manager range: (array2 - array1)
207214{ #category : #accessing }
208215PMGeneralFunctionFit >> optimizer [
209216" if you want to change parameters of AnotherGeneticOptimizer not directly available in GeneralFunctionFit"
210- ^ go
217+ ^ geneticOptimizer
211218]
212219
213220{ #category : #accessing }
@@ -221,7 +228,7 @@ manager populationSize: anInteger .
221228{ #category : #accessing }
222229PMGeneralFunctionFit >> precision [
223230" not really useful to look at, you might better look at #error"
224- ^ go precision
231+ ^ geneticOptimizer precision
225232]
226233
227234{ #category : #printing }
@@ -230,7 +237,7 @@ PMGeneralFunctionFit >> printOn: aStream [
230237 nextPutAll: ' a ' ;
231238 nextPutAll: self class name;
232239 nextPut: $(;
233- print: go ;
240+ print: geneticOptimizer ;
234241 nextPutAll: ' with data of size: ' ;
235242 print: data size .
236243 dataTruncated ifTrue:
@@ -272,7 +279,7 @@ self data: data
272279PMGeneralFunctionFit >> resetResult [
273280result := nil .
274281firstResult := nil .
275- go resetBestPoints
282+ geneticOptimizer resetBestPoints
276283]
277284
278285{ #category : #accessing }
0 commit comments