Subroutine sce_init
182 :
183 : !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
184 : !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
185 : !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
186 :
187 : subroutine sce_init (run_initialseed)
188 : use vom_sce_mod
189 : implicit none
190 :
191 : INTEGER, INTENT(out) :: run_initialseed
192 :
193 : INTEGER :: ii, jj
194 : CHARACTER(3) :: str
195 : CHARACTER(24) :: logdate
196 : CHARACTER(len=135) :: msg
197 :
198 : !EXTERNAL compar
199 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
200 : ! Initialize the random number generator
201 : ! (standard subroutine, based on the date and time)
202 : if (vom_command .ne. 4) then
203 : CALL RANDOM_SEED()
204 : endif
205 : call fdate(logdate)
206 : !only run the next part the first time for allocation
207 : if( .not. allocated(optid) ) then
208 : call read_shufflevar()
209 :
210 :
211 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
212 : ! WRITE SCREEN HEADER
213 :
214 : write(*,*) 'SHUFFLED COMPLEX EVOLUTION OPTIMISER'
215 :
216 : write(*,*) " "
217 : write(msg,'(" Run time: ",A)') logdate
218 : write(*,*) TRIM(msg)
219 :
220 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
221 : ! READ PARAMETER FILE shufflevar
222 :
223 :
224 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
225 : ! CALCULATE NUMBER OF OPTIMISABLE PARAMETERS
226 :
227 : nopt = SUM(paropt(:))
228 : mopt = 2 * nopt + 1 ! SCE VARIABLE m
229 : ! * number of complexes after Muttil(2004) or from shuffle.par
230 : i_ncomp_ = MAX(i_ncomp_, CEILING(1.d0 + 2.d0 ** nopt &
231 : & / (1.d0 + 2.d0 * nopt)))
232 : sopt = mopt * i_ncomp_ ! SCE VARIABLE s
233 : qopt = nopt + 1 ! CCE VARIABLE q
234 : ncomp2 = i_ncomp_
235 :
236 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
237 : ! ALLOCATE GLOBAL FIELDS
238 :
239 :
240 :
241 : allocate(optid(nopt))
242 : allocate(shufflevar(vom_npar,sopt))
243 : allocate(ofvec(sopt))
244 : allocate(wgt(mopt))
245 : allocate(cv_(nopt))
246 : allocate(ranarr(nopt))
247 : !allocate(ranarr_simplex(nopt))
248 : allocate(dataarray(nopt*8+1,nopt+1))
249 : allocate(shufflevar2(vom_npar))
250 : !allocate(parentsid(qopt))
251 : !allocate(objfunsub(qopt))
252 : !allocate(invarsub(vom_npar,qopt))
253 : ! allocate(selected(mopt))
254 : ! allocate(centroid(vom_npar))
255 : ! allocate(newpoint(vom_npar))
256 : allocate(posarray(2**nopt,nopt))
257 : allocate(initpop(nopt,5))
258 : allocate(sumvar(nopt))
259 :
260 : end if
261 :
262 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
263 : ! INITIALISE OUTPUT FORMAT STRING
264 : ! INTRODUCED BY STAN TO HAVE ONE COLUMN PER PARAMETER AND ONE FOR OF
265 :
266 : write(str,'(i2)') vom_npar + 1 ! internal write to convert from integer to string
267 : outformat = '('//str//'e24.15)' ! includes a column for each parameter and a column for the value of OF
268 :
269 : ! * ADDED BY STAN TO WRITE shufflevar AND ofvec OF LAST LOOP TO FILE
270 : write(str,'(i3)') sopt ! internal write to convert from number to string
271 : loopformat = '('//str//'e24.15)' ! includes a column for each set
272 :
273 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
274 : ! INITIALISE optid: THE INDEX OF THOSE PARAMETERS THAT ARE OPTIMISABLE
275 :
276 : jj = 0
277 : do ii = 1, vom_npar
278 : if (paropt(ii) .gt. 0) then
279 : jj = jj + 1
280 : optid(jj) = ii
281 : endif
282 : enddo
283 :
284 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
285 : ! INITIALISE optid: THE INDEX OF THOSE PARAMETERS THAT ARE OPTIMISABLE
286 : ! ASSIGN PROBABILITY WEIGHTS
287 :
288 : do ii = 1, mopt
289 : wgt(ii) = 2.d0 * (mopt + 1.d0 - ii) / mopt / (mopt + 1.d0)
290 : enddo
291 :
292 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
293 : ! INSERTED BY STAN TO ALLOW CONTINUATION OF OPTIMSATION FROM PREVIOUSLY SAVED STEP
294 :
295 : call open_output (logdate, run_initialseed)
296 :
297 : return
298 : end subroutine sce_init