示例#1
0
def childWorker(inQueue,     \
                outQueue,    \
                schoolInfo,  \
                entriesList, \
                config):

  #gc.set_debug(gc.DEBUG_LEAK)
  procName    = multiprocessing.current_process().name
  newSched    = None

  #Load config file
  wrkConfig = config
  #exec(open("settings.py").read(), wrkConfig)
  schedFitness.fitnessInitialize(schoolInfo, entriesList, wrkConfig)
  
  randGenWrk  = random.SystemRandom()
  startTime   = time.time()
  counter     = 0
  mutateCnt   = 0
  xOverCnt    = 0

  while True:
    workPackage = inQueue.get()
    counter    += 1    
#    if procName == 'SchedWorker5' and counter%1000==0 :
#      msgStr = ('Wrkr5 GC Obj %d' % len(gc.get_objects()))
#      outQueue.put({'msg':msgStr})
      
    if workPackage['cmd'] == 'STOP':
      break
      
    elif workPackage['cmd'] == 'Mutate': 
      newSched = mutate(workPackage['sch1'], randGenWrk)
      if newSched['score'] < workPackage['sch1']['score']:
        #print ('Mutate child parent fitness %d %d' % (newSched['score'], workPackage['sch1']['score']))
        outQueue.put ({'idx':workPackage['idx'], 'sch':newSched, 'method':'M'})
        mutateCnt += 1
        
    elif workPackage['cmd'] == 'XOver':
      newSched    = scheduleSex(workPackage['sch1'], workPackage['sch2'], randGenWrk)
      if newSched['score'] < workPackage['sch1']['score']:
        #print ('XOver child parent fitness %d %d' % (newSched['score'], workPackage['sch1']['score']))
        outQueue.put ({'idx':workPackage['idx'], 'sch':newSched, 'method':'X'})
        xOverCnt += 1

    elif workPackage['cmd'] == 'Done':
        outQueue.put({'done':1})

  msgStr = '%s STOP Count %d Rate %1.1f xOver:%d Mutate:%d:' % \
           (procName, counter, counter / (time.time()-startTime), xOverCnt, mutateCnt)
  outQueue.put({'msg':msgStr})
  msgStr = procName + ' ' + schedFitness.getFitnessMetrics()
  outQueue.put({'msg':msgStr})
示例#2
0
def childWorker(inQueue,     \
                outQueue,    \
                schoolInfo,  \
                entriesList, \
                config):

    #gc.set_debug(gc.DEBUG_LEAK)
    procName = multiprocessing.current_process().name
    newSched = None

    #Load config file
    wrkConfig = config
    #exec(open("settings.py").read(), wrkConfig)
    schedFitness.fitnessInitialize(schoolInfo, entriesList, wrkConfig)

    randGenWrk = random.SystemRandom()
    startTime = time.time()
    counter = 0
    mutateCnt = 0
    xOverCnt = 0

    while True:
        workPackage = inQueue.get()
        counter += 1
        #    if procName == 'SchedWorker5' and counter%1000==0 :
        #      msgStr = ('Wrkr5 GC Obj %d' % len(gc.get_objects()))
        #      outQueue.put({'msg':msgStr})

        if workPackage['cmd'] == 'STOP':
            break

        elif workPackage['cmd'] == 'Mutate':
            newSched = mutate(workPackage['sch1'], randGenWrk)
            if newSched['score'] < workPackage['sch1']['score']:
                #print ('Mutate child parent fitness %d %d' % (newSched['score'], workPackage['sch1']['score']))
                outQueue.put({
                    'idx': workPackage['idx'],
                    'sch': newSched,
                    'method': 'M'
                })
                mutateCnt += 1

        elif workPackage['cmd'] == 'XOver':
            newSched = scheduleSex(workPackage['sch1'], workPackage['sch2'],
                                   randGenWrk)
            if newSched['score'] < workPackage['sch1']['score']:
                #print ('XOver child parent fitness %d %d' % (newSched['score'], workPackage['sch1']['score']))
                outQueue.put({
                    'idx': workPackage['idx'],
                    'sch': newSched,
                    'method': 'X'
                })
                xOverCnt += 1

        elif workPackage['cmd'] == 'Done':
            outQueue.put({'done': 1})

    msgStr = '%s STOP Count %d Rate %1.1f xOver:%d Mutate:%d:' % \
             (procName, counter, counter / (time.time()-startTime), xOverCnt, mutateCnt)
    outQueue.put({'msg': msgStr})
    msgStr = procName + ' ' + schedFitness.getFitnessMetrics()
    outQueue.put({'msg': msgStr})
示例#3
0
    if 'msg' in response:
      logger.msg (response['msg'])
    respCount += 1;
  except Empty:
    break
logger.msg ('Cleaned out %d from output queue' % respCount)

for p in processes:
  try:
    p.join(timeout=60)
  except TimeoutError:
    logger.msg ('Timeout joining process')

(lowestScore, lowestScoreIdx) = computeTopScore (rdm)
logger.msg ('Best Score %4d' % lowestScore)
logger.msg(schedFitness.getFitnessMetrics())

logger.msg ('Scores:')
for scoreX in rdm:
  logger.msg ('   %d ' % scoreX['score'])

logger.msg ('Printing best score of %d' % lowestScore)

scorePrintFolder = os.path.join(outFolder, str(math.floor(lowestScore)))
if not os.path.exists(scorePrintFolder):
  fitnessFile      = os.path.join(scorePrintFolder, 'fitnessReport.txt')

  schedIO.printSched       (schedule   = rdm[lowestScoreIdx],   \
                            schoolInf = schoolInfo,            \
                            outFolder  = scorePrintFolder)
  validateSched(rdm[lowestScoreIdx], sessionList, entriesList, logger)
示例#4
0
        if 'msg' in response:
            logger.msg(response['msg'])
        respCount += 1
    except Empty:
        break
logger.msg('Cleaned out %d from output queue' % respCount)

for p in processes:
    try:
        p.join(timeout=60)
    except TimeoutError:
        logger.msg('Timeout joining process')

(lowestScore, lowestScoreIdx) = computeTopScore(rdm)
logger.msg('Best Score %4d' % lowestScore)
logger.msg(schedFitness.getFitnessMetrics())

logger.msg('Scores:')
for scoreX in rdm:
    logger.msg('   %d ' % scoreX['score'])

logger.msg('Printing best score of %d' % lowestScore)

scorePrintFolder = os.path.join(outFolder, str(math.floor(lowestScore)))
if not os.path.exists(scorePrintFolder):
    fitnessFile = os.path.join(scorePrintFolder, 'fitnessReport.txt')

    schedIO.printSched       (schedule   = rdm[lowestScoreIdx],   \
                              schoolInf = schoolInfo,             \
                              entriesLst = entriesList,           \
                              outFolder  = scorePrintFolder)