def runThread(agent, numEpisodes, results, finished, histories):
    exp = SimpleSimulation(numDevices=1, maxJobs=3, agentClass=agent)
    exp.setFpgaIdleSleep(5)
    exp.setBatterySize(1e0)

    # sim.simulations.constants.FPGA_IDLE_SLEEP = 5
    # sim.simulations.constants.OFFLOADING_POLICY = REINFORCEMENT_LEARNING
    # sim.simulations.constants.TOTAL_TIME = 1e3
    try:
        for e in range(numEpisodes):
            debug.infoEnabled = False
            exp.simulateEpisode()

            results.put([
                "Episode reward %s" % exp.sharedAgent, e,
                exp.sharedAgent.episodeReward
            ])
    except:
        debug.printCache(200)
        traceback.print_exc(file=sys.stdout)
        print(agent, e)
        print("Error in experiment ̰:", exp.time)
        sys.exit(0)

    finished.put(True)
    assert simulationResults.learningHistory is not None
    histories.put(simulationResults.learningHistory)
    print("\nsaving history", simulationResults.learningHistory, '\nr')

    print("forward", counters.NUM_FORWARD, "backward", counters.NUM_BACKWARD)

    exp.sharedAgent.printModel()
Esempio n. 2
0
def runThread(agent, numEpisodes, numDevices, taskOptions, results, finished):
    constants.CENTRALISED_LEARNING = False
    exp = SimpleSimulation(numDevices=numDevices, maxJobs=10, agentClass=agent, tasks=taskOptions, systemStateClass=targetedSystemState, reconsiderBatches=False, scenarioTemplate=RANDOM_SCENARIO_ROUND_ROBIN, centralisedLearning=False)
    exp.scenario.setInterval(1)
    exp.setFpgaIdleSleep(60)
    exp.setBatterySize(1e0)

    e = None
    try:
        for e in range(numEpisodes):
            debug.infoEnabled = False
            exp.simulateEpisode()

            for device in exp.devices:
                for task in taskOptions:
                    results.put(["Device %d Task %d" % (device.index, task.identifier), e, device.getNumTasksDone(task)])
                    # print(e, "Device %d Task %s" % (device.index, task), e, device.getNumTasksDone(task))
    except:
        debug.printCache()
        traceback.print_exc(file=sys.stdout)
        print(agent, e)
        print("Error in experiment ̰:", exp.time)
        sys.exit(0)

    finished.put(True)
def runThread(agent, numEpisodes, results, finished, histories):
    exp = SimpleSimulation(numDevices=2,
                           maxJobs=6,
                           agentClass=agent,
                           scenarioTemplate=RANDOM_SCENARIO_RANDOM)
    exp.setBatterySize(1e0)

    try:
        for e in range(int(numEpisodes / 2)):
            exp.simulateEpisode()

            results.put(["Agent %s" % agent.__name__, e, exp.numFinishedJobs])

        exp.sharedAgent.setProductionMode(True)
        for e in range(int(numEpisodes / 2), int(numEpisodes)):
            exp.simulateEpisode()

            results.put(["Agent %s" % agent.__name__, e, exp.numFinishedJobs])
    except:
        debug.printCache()
        traceback.print_exc(file=sys.stdout)
        print(agent)
        print("Error in experiment ̰:", exp.time)
        sys.exit(0)

    finished.put(True)
def runThread(agent, numEpisodes, numDevices, taskOptions, results, finished):
    constants.CENTRALISED_LEARNING = False
    exp = SimpleSimulation(numDevices=numDevices, maxJobs=10, agentClass=agent, tasks=taskOptions, systemStateClass=targetedSystemState, reconsiderBatches=False, scenarioTemplate=RANDOM_SCENARIO_ROUND_ROBIN, centralisedLearning=False)
    exp.scenario.setInterval(1)
    exp.setFpgaIdleSleep(60)
    exp.setBatterySize(1e0)

    e = None
    try:
        for e in range(numEpisodes):
            debug.infoEnabled = False
            exp.simulateEpisode()

            times = np.zeros((len(taskOptions),))
            for device in exp.devices:
                for t in range(len(taskOptions)):
                    task = taskOptions[t]
                    times[t] = device.fpga.getConfigTime(task)
                results.put(["Device %d %% time EASY" % device.index, e, times[0]/np.sum(times)])
                # if times[1] == 0:
                #     ratio = inf
                # else:
                #     ratio = times[0] / times[1]
                # if ratio < 1 and ratio != 0: ratio = 1. / ratio
                # results.put(["Device %d EASY/HARD" % (device.index), e, ratio])
                # print(e, "Device %d Task %s" % (device.index, task), e, device.getNumTasksDone(task))
    except:
        debug.printCache()
        traceback.print_exc(file=sys.stdout)
        print(agent, e)
        print("Error in experiment ̰:", exp.time)
        sys.exit(0)

    finished.put(True)
def runThread(agent, numEpisodes, results, finished):
    exp = SimpleSimulation(numDevices=2,
                           maxJobs=maxjobs,
                           agentClass=agent,
                           tasks=[HARD],
                           systemStateClass=minimalSystemState,
                           scenarioTemplate=REGULAR_SCENARIO_ROUND_ROBIN,
                           centralisedLearning=True,
                           numEnergyLevels=numEnergyStates,
                           trainClassification=True)
    # exp.scenario.setInterval(1)
    exp.sharedAgent.loadModel()
    exp.sharedAgent.setProductionMode()
    exp.setBatterySize(1e-1)
    exp.setFpgaIdleSleep(1e-3)

    e = None
    try:
        for e in range(numEpisodes):
            debug.infoEnabled = False
            exp.simulateEpisode(e)

            agentName = exp.devices[0].agent.__name__
            result = [f"{agentName}", e, exp.numFinishedJobs]
            print(result)
            results.put(result)
            # results.put([f"{agentName}", e, exp.getCurrentTime()])
    except:
        debug.printCache()
        traceback.print_exc(file=sys.stdout)
        print(agent, e)
        print("Error in experiment :", exp.time)
        sys.exit(0)

    finished.put(True)
Esempio n. 6
0
def runThread(agent, numEpisodes, centralised, results, finished):
    exp = SimpleSimulation(numDevices=2,
                           maxJobs=maxjobs,
                           agentClass=agent,
                           tasks=[HARD],
                           systemStateClass=minimalSystemState,
                           scenarioTemplate=REGULAR_SCENARIO_ROUND_ROBIN,
                           centralisedLearning=centralised)
    # exp.scenario.setInterval(1)
    exp.setBatterySize(1e-1)
    exp.setFpgaIdleSleep(1e-3)

    e = None
    try:
        for e in range(numEpisodes):
            debug.infoEnabled = False
            exp.simulateEpisode(e)

            # results.put(["%s %s" % (exp.devices[0].agent.__name__, "Centralised" if centralised else "Decentralised"), e, exp.numFinishedJobs])
            results.put([
                "%s %s" % (exp.devices[0].agent.__name__,
                           "Centralised" if centralised else "Decentralised"),
                e,
                exp.getCurrentTime()
            ])
    except:
        debug.printCache()
        traceback.print_exc(file=sys.stdout)
        print(agent, e)
        print("Error in experiment ̰:", exp.time)
        sys.exit(0)

    finished.put(True)
Esempio n. 7
0
def runThread(agent, numEpisodes, results, finished):
    exp = SimpleSimulation(numDevices=16, maxJobs=150, agentClass=agent, tasks=[HARD])
    exp.scenario.setInterval(1)
    exp.setBatterySize(1e0)

    e = None
    try:
        for e in range(numEpisodes):
            debug.infoEnabled = False
            exp.simulateEpisode()

            results.put(["Agent %s" % agent.__name__, e, exp.getCurrentTime()])
    except:
        debug.printCache()
        traceback.print_exc(file=sys.stdout)
        print(agent, e)
        print("Error in experiment ̰:", exp.time)
        sys.exit(0)

    finished.put(True)
    # assert simulationResults.learningHistory is not None
    # histories.put(simulationResults.learningHistory)
    # print("\nsaving history", simulationResults.learningHistory, '\nr')

    print("forward", counters.NUM_FORWARD, "backward", counters.NUM_BACKWARD)
Esempio n. 8
0
def runThread(agent, numEpisodes, results, finished):
    exp = SimpleSimulation(numDevices=16,
                           maxJobs=150,
                           agentClass=agent,
                           tasks=[HARD])
    exp.scenario.setInterval(1)
    exp.setBatterySize(1e0)

    e = None
    try:
        for e in range(numEpisodes):
            debug.infoEnabled = False
            exp.simulateEpisode()

            results.put([
                "Agent %s" % agent.__name__, e,
                np.average([
                    device.totalSleepTime / device.currentTime.current
                    for device in exp.devices
                ])
            ])
    except:
        debug.printCache()
        traceback.print_exc(file=sys.stdout)
        print(agent, e)
        print("Error in experiment ̰:", exp.time)
        sys.exit(0)

    finished.put(True)
Esempio n. 9
0
def runThread(results, finished, histories):
    print("creating simulation", constants.OFFLOADING_POLICY)
    debug.enabled = False
    constants.DRAW = False
    constants.FPGA_POWER_PLAN = IDLE_TIMEOUT
    constants.OFFLOADING_POLICY = REINFORCEMENT_LEARNING

    exp = simulation(agentClass=minimalTableAgent)
    current = exp

    try:
        for i in range(numJobs):
            exp.simulateUntilJobDone()
            batch = job.jobResultsQueue.get()
            batch = batch[0]
            # print("batch:", batch)
            results.put(["Batch Size", exp.completedJobs, batch])
    except:
        print("Error in experiment:", exp.time)
        traceback.print_exc(file=sys.stdout)
        debug.printCache()
        sys.exit(0)

    finished.put(True)
    histories.put(simulationResults.learningHistory)

    print("forward", counters.NUM_FORWARD, "backward", counters.NUM_BACKWARD)
    exp.sharedAgent.printModel()
Esempio n. 10
0
def runThread(agent, numEpisodes, results, finished, histories):
    exp = SimpleSimulation(numDevices=2, maxJobs=6, agentClass=agent)
    exp.setFpgaIdleSleep(5)
    exp.setBatterySize(1e0)

    try:
        for e in range(numEpisodes):
            debug.infoEnabled = False
            exp.simulateEpisode()
            results.put(["Duration %s" % exp.sharedAgent, e, exp.getCurrentTime()])
            # results.put(["Episode reward %s" % exp.sharedAgent, e, exp.sharedAgent.episodeReward])
    except:
        debug.printCache(200)
        traceback.print_exc(file=sys.stdout)
        print(agent, e)
        print("Error in experiment ̰:", exp.time)
        sys.exit(0)

    finished.put(True)
    assert simulationResults.learningHistory is not None
    histories.put(simulationResults.learningHistory)
    print("\nsaving history", simulationResults.learningHistory, '\nr')

    print("forward", counters.NUM_FORWARD, "backward", counters.NUM_BACKWARD)

    exp.sharedAgent.printModel()
Esempio n. 11
0
def runThread(agent, numEpisodes, numDevices, taskOptions, interval, results,
              finished):
    constants.CENTRALISED_LEARNING = False
    exp = SimpleSimulation(numDevices=numDevices,
                           maxJobs=50,
                           agentClass=agent,
                           tasks=taskOptions,
                           systemStateClass=targetedSystemState,
                           reconsiderBatches=False,
                           scenarioTemplate=RANDOM_SCENARIO_ROUND_ROBIN,
                           centralisedLearning=False)
    exp.scenario.setInterval(interval)
    exp.setFpgaIdleSleep(1e-3)
    exp.setBatterySize(1e-1)

    assert numEpisodes % 2 == 0

    offset = 0
    e = 0
    reduced = False
    try:
        #pretrain
        # for e in range(0):
        #     exp.simulateEpisode()

        debug.infoEnabled = False
        for i in range(2):
            for e in range(int(numEpisodes / 2)):
                exp.simulateEpisode(e)
                dol_ind_task, dol_task_ind = DOL(exp.devices, taskOptions)
                results.put(
                    ["DOL %d devices" % numDevices, offset + e, dol_ind_task])
                results.put([
                    "Jobs Completed %d devices" % numDevices, offset + e,
                    exp.numFinishedJobs
                ])
                # results.put(["Interval %.2f" % interval, e, dol_ind_task])

            if not reduced:
                print()
                # remove half
                for i in range(int(numDevices / 2)):
                    exp.removeDevice()
                reduced = True
                print("reduce to", exp.devices)
                offset = e

        finished.put("")

    except:
        debug.printCache()
        traceback.print_exc(file=sys.stdout)
        print(agent, e)
        print("Error in experiment ̰:", exp.time)
        print(agent, numEpisodes, numDevices, taskOptions, interval, e, offset,
              reduced)
        sys.exit(0)

    finished.put(True)
Esempio n. 12
0
def runThread(agent, numEpisodes, numDevices, taskOptions, interval, results, finished):
    constants.CENTRALISED_LEARNING = False
    exp = SimpleSimulation(numDevices=numDevices, maxJobs=10, agentClass=agent, tasks=taskOptions, systemStateClass=targetedSystemState, reconsiderBatches=False, scenarioTemplate=RANDOM_SCENARIO_ROUND_ROBIN, centralisedLearning=False)
    exp.scenario.setInterval(interval)
    exp.setFpgaIdleSleep(5)
    exp.setBatterySize(1e0)

    e = None
    try:
        #pretrain
        for e in range(0):
            exp.simulateEpisode()

        for e in range(numEpisodes):
            debug.infoEnabled = False
            exp.simulateEpisode()

            times = np.zeros((len(taskOptions),))
            percentages = np.zeros((numDevices,))
            for device in exp.devices:
                for t in range(len(taskOptions)):
                    task = taskOptions[t]
                    times[t] = device.fpga.getConfigTime(task)
                sum = np.sum(times)
                if sum > 0:
                    perc = times[0] / sum
                else:
                    perc = 0.5
                if perc < 0.5: perc = 1. - perc
                percentages[device.index] = perc

            # results.put(["", np.average(percentages), exp.numFinishedJobs])
            results.put(["Interval %.2f" % interval, np.average(percentages), exp.numFinishedJobs])
        # for device in exp.devices:
        #     device.agent.setProductionMode()
        # exp.simulateEpisode()


        finished.put("")
                # if times[1] == 0:
                #     ratio = inf
                # else:
                #     ratio = times[0] / times[1]
                # if ratio < 1 and ratio != 0: ratio = 1. / ratio
                # results.put(["Device %d EASY/HARD" % (device.index), e, ratio])
                # print(e, "Device %d Task %s" % (device.index, task), e, device.getNumTasksDone(task))
    except:
        debug.printCache()
        traceback.print_exc(file=sys.stdout)
        print(agent, e)
        print("Error in experiment ̰:", exp.time)
        sys.exit(0)

    finished.put(True)
Esempio n. 13
0
def runThread(id, agent, systemState, productionMode, offPolicy, numPhases,
              numEpisodes, results, finished):
    exp = SimpleSimulation(numDevices=4,
                           maxJobs=maxjobs,
                           agentClass=agent,
                           tasks=[HARD],
                           systemStateClass=systemState,
                           scenarioTemplate=REGULAR_SCENARIO_ROUND_ROBIN,
                           centralisedLearning=True,
                           numEnergyLevels=numEnergyStates,
                           trainClassification=True,
                           offPolicy=offPolicy,
                           allowExpansion=True)

    exp.setBatterySize(1e-1)
    exp.setFpgaIdleSleep(1e-3)
    exp.sharedAgent.loadModel()
    exp.sharedAgent.setProductionMode(productionMode)

    e = None
    overallEpisode = 0
    try:
        for phase in range(numPhases):
            for e in range(numEpisodes):
                debug.infoEnabled = False
                exp.simulateEpisode(e)

                agentName = exp.devices[0].agent.__name__
                result = [
                    f"{agentName} Production: {productionMode} OffPolicy: {offPolicy}",
                    overallEpisode + e, exp.numFinishedJobs
                ]
                # print("result", result)
                results.put(result)
                # results.put([f"{agentName}", e, exp.getCurrentTime()])

            # check if not the last one
            if phase < numPhases - 1:
                beforeStates = exp.currentSystemState.getUniqueStates()
                for i in range(5):
                    exp.expandState("jobsInQueue")

                # print("\nexpand:", beforeStates, exp.currentSystemState.getUniqueStates())
                # print()
            overallEpisode += numEpisodes
    except:
        debug.printCache()
        traceback.print_exc(file=sys.stdout)
        print(agent, e, offPolicy, productionMode)
        print("Error in experiment :", exp.time)
        sys.exit(0)

    finished.put(True)
Esempio n. 14
0
def runThread(agent, numTicks, numDevices, results, finished, histories):
    exp = SimpleSimulation(numDevices=numDevices,
                           scenarioTemplate=REGULAR_SCENARIO_RANDOM,
                           jobInterval=10,
                           agentClass=agent)
    exp.setBatterySize(1e4)
    exp.reset()
    timeOffsets = dict()
    previousTime = dict()
    currentEnergy = dict()
    for dev in exp.devices:
        timeOffsets[dev] = 0
        currentEnergy[dev] = dev.energyLevel
        previousTime[dev] = 0
        dev.latestPower = None

    i = None
    try:
        for i in range(numTicks):
            if exp.finished:
                for dev in exp.devices:
                    timeOffsets[dev] += dev.currentTime.current
                exp.reset()
            # for i in range():
            usages = exp.simulateTick()
            if usages == []:
                usages = [(0, 0), (0, 0)]
            for duration, power in usages:
                currentTime = previousTime[exp.latestDevice] + duration
                results.put([
                    "%s Power" % exp.latestDevice,
                    previousTime[exp.latestDevice], power * 1e3
                ])
                previousTime[exp.latestDevice] = currentTime
                results.put(
                    ["%s Power" % exp.latestDevice, currentTime, power * 1e3])
            time.sleep(0.2)
    except:
        traceback.print_exc(file=sys.stdout)
        print(agent, i)
        print("Error in experiment ̰:", exp.time)
        debug.printCache(200)
        sys.exit(0)

    finished.put(True)
    # assert simulationResults.learningHistory is not None
    # histories.put(simulationResults.learningHistory)
    # print("\nsaving history", simulationResults.learningHistory, '\nr')

    print("forward", counters.NUM_FORWARD, "backward", counters.NUM_BACKWARD)
Esempio n. 15
0
def runThread(id, agent, productionMode, offPolicy, numEpisodes, results,
              finished):
    startTime = datetime.now()

    exp = SimpleSimulation(numDevices=4,
                           maxJobs=maxjobs,
                           agentClass=agent,
                           tasks=[HARD],
                           systemStateClass=extendedSystemState,
                           scenarioTemplate=REGULAR_SCENARIO_ROUND_ROBIN,
                           centralisedLearning=True,
                           numEnergyLevels=numEnergyStates,
                           trainClassification=True,
                           offPolicy=offPolicy)
    exp.sharedAgent.precache = True
    # exp.scenario.setInterval(1)
    exp.sharedAgent.loadModel()
    if productionMode:
        exp.sharedAgent.setProductionMode()
    exp.setBatterySize(1e-1)
    exp.setFpgaIdleSleep(1e-3)

    e = None
    try:
        for e in range(numEpisodes):
            debug.infoEnabled = False
            exp.simulateEpisode(e)

            agentName = exp.devices[0].agent.__name__
            result = [
                f"{agentName} PM: {productionMode} OP: {offPolicy}", e,
                exp.numFinishedJobs
            ]

            results.put(result)
            # result = [f"{agentName} PM: {productionMode} OP: {offPolicy} JOBS", e, exp.jobCounter]
            # results.put(result)
    except:
        debug.printCache()
        traceback.print_exc(file=sys.stdout)
        print(agent, e)
        print("Error in experiment :", exp.time)
        sys.exit(0)

    finished.put(True)
    print(
        f"duration: {agent} PM {productionMode} OP {offPolicy}: {datetime.now() - startTime}"
    )
Esempio n. 16
0
def runThread(agent, numEpisodes, results, finished):
    # constants.CENTRALISED_LEARNING = False
    exp = SimpleSimulation(numDevices=2,
                           maxJobs=maxjobs,
                           agentClass=agent,
                           tasks=[HARD],
                           systemStateClass=minimalSystemState,
                           scenarioTemplate=REGULAR_SCENARIO_ROUND_ROBIN,
                           reconsiderBatches=False,
                           centralisedLearning=False)
    # exp.scenario.setInterval(1)
    exp.setFpgaIdleSleep(1e-3)
    exp.setBatterySize(1e-1)

    e = None
    try:
        for e in range(numEpisodes):
            debug.infoEnabled = False
            exp.simulateEpisode(e)

            results.put([
                "Job %s" % exp.devices[0].agent.__name__, e,
                exp.numFinishedJobs
            ])
            results.put([
                "Duration %s" % exp.devices[0].agent.__name__, e,
                exp.getCurrentTime()
            ])
    except:
        debug.printCache()
        traceback.print_exc(file=sys.stdout)
        print(agent, e)
        print("Error in experiment ̰:", exp.time)
        sys.exit(0)

    finished.put(True)
    # assert simulationResults.learningHistory is not None
    # histories.put(simulationResults.learningHistory)
    # print("\nsaving history", simulationResults.learningHistory, '\nr')

    print("forward", counters.NUM_FORWARD, "backward", counters.NUM_BACKWARD)
    if exp.sharedAgent.__class__ == minimalTableAgent:
        plotting.plotModel(exp.sharedAgent, drawLabels=False)
Esempio n. 17
0
def runThread(agent, numEpisodes, numDevices, taskOptions, interval, results,
              finished):
    constants.CENTRALISED_LEARNING = False
    exp = SimpleSimulation(numDevices=numDevices,
                           maxJobs=10,
                           agentClass=agent,
                           tasks=taskOptions,
                           systemStateClass=targetedSystemState,
                           reconsiderBatches=False,
                           scenarioTemplate=RANDOM_SCENARIO_ROUND_ROBIN,
                           centralisedLearning=False)
    exp.scenario.setInterval(interval)
    exp.setFpgaIdleSleep(5)
    exp.setBatterySize(1e0)

    e = None
    try:
        #pretrain
        # for e in range(0):
        #     exp.simulateEpisode()

        for e in range(numEpisodes):
            debug.infoEnabled = False
            exp.simulateEpisode()

            dol_ind_task, dol_task_ind = DOL(exp.devices, taskOptions)

            results.put(["DOL Devices %d" % numDevices, e, dol_ind_task])
            results.put([
                "Jobs Devices %d" % numDevices, e, exp.numFinishedJobs / 1000
            ])
            # results.put(["Interval %.2f" % interval, e, dol_ind_task])

        finished.put("")

    except:
        debug.printCache()
        traceback.print_exc(file=sys.stdout)
        print(agent, e)
        print("Error in experiment ̰:", exp.time)
        sys.exit(0)

    finished.put(True)
Esempio n. 18
0
def run():
    print("testing simple simulation")
    constants.NUM_DEVICES = 2
    constants.DEFAULT_ELASTIC_NODE.BATTERY_SIZE = 1e2
    constants.OFFLOADING_POLICY = REINFORCEMENT_LEARNING
    debug.enabled = True
    debug.learnEnabled = True
    constants.DRAW_DEVICES = False
    taskOptions = [EASY, HARD]
    exp = Simulation(systemStateClass=minimalSystemState,
                     agentClass=minimalTableAgent,
                     tasks=taskOptions)

    numjobs = int(1e5)

    finishedJobs = dict()
    for task in taskOptions:
        finishedJobs[task] = 0
    try:
        # for i in range(numjobs):
        # 	exp.createNewJob(exp.devices[0])

        # for i in range(10):
        # 	exp.simulateTick()

        # for i in range(numjobs):
        # 	exp.simulateUntilJobDone()
        # 	finishedJobs[exp.getLatestFinishedJob().currentTask] += 1

        # exp.simulateUntilTime(50)

        exp.simulateEpisode()
        print("finished jobs:", exp.finishedTasks)

    # try:
    # 	exp.simulateEpisode()
    # 	print("Experiment done!", exp.time)
    # except Exception:
    # 	print("number of successful episodes:", exp.episodeNumber)
    # 	print(sys.exc_info())
    except:
        debug.printCache()
        traceback.print_exc(file=sys.stdout)
Esempio n. 19
0
def runThread(scenario, numEpisodes, results, finished):
    exp = SimpleSimulation(maxJobs=6, scenarioTemplate=scenario)
    exp.setBatterySize(1e0)
    e = -1

    try:
        for e in range(numEpisodes):
            exp.simulateEpisode()

            results.put([str(scenario), e, exp.numFinishedJobs])
    except:
        debug.printCache()
        traceback.print_exc(file=sys.stdout)
        print(scenario, e)
        print("Error in experiment ̰:", exp.time)
        sys.exit(0)

    try:
        finished.put(True)
    except:
        traceback.print_stack()
    print("forward", counters.NUM_FORWARD, "backward", counters.NUM_BACKWARD)
Esempio n. 20
0
latest = None
try:
    print("running episodes")
    for e in range(numEpisodes):
        if e % 100 == 0: print ('.')
        debug.infoEnabled = False
        exp.simulateEpisode(e)
        latest = exp.numFinishedJobs
        results.append(latest)

        # results.put(["%s %s" % (exp.devices[0].agent.__name__, "Centralised" if centralised else "Decentralised"), e, exp.numFinishedJobs])

    avg = np.average(results)
    print("done, average is", avg)
    while latest < avg:
        print(f"bad ending... keep trying ({latest}/{avg})")
        exp.simulateEpisode(e)
        latest = exp.numFinishedJobs
        results.append(latest)

except:
    debug.printCache()
    traceback.print_exc(file=sys.stdout)
    print(agent, e)
    print("Error in experiment:", exp.time)
    sys.exit(0)

exp.sharedAgent.saveModel()

pp.plot(results)
pp.savefig(f'{localConstants.OUTPUT_DIRECTORY}/createModel.png')