Exemple #1
0
 def POM3_REQUIREMENTS(my, x):
     return pom3_requirements(my.POM3_DECISIONS(x))
 def POM3_REQUIREMENTS(my, x):
   return pom3_requirements(my.POM3_DECISIONS(x))
Exemple #3
0
    def simulate(p3, inputs):

        # # # # # # # # # # #
        # 0) Initialization #
        # # # # # # # # # # #

        POM3_DECISIONS = pom3_decisions(inputs)
        numberOfShuffles = random.randint(2, 6)

        # # # # # # # # # # # # # # #
        # 1) Generate Requirements  #
        # # # # # # # # # # # # # # #

        POM3_REQUIREMENTS = pom3_requirements(POM3_DECISIONS)

        # # # # # # # # # # #
        # 2) Generate Teams #
        # # # # # # # # # # #

        POM3_TEAMS = pom3_teams(POM3_REQUIREMENTS, POM3_DECISIONS)

        # # # # # # # #
        # 3) Shuffle  #
        # # # # # # # #

        for shufflingIteration in range(numberOfShuffles):
            for team in POM3_TEAMS.teams:
                team.updateBudget(numberOfShuffles)
                team.collectAvailableTasks(POM3_REQUIREMENTS)
                team.applySortingStrategy()
                team.executeAvailableTasks()
                team.discoverNewTasks()
                team.updateTasks()

        # # # # # # # # # # # # #
        # 4) Objective Scoring  #
        # # # # # # # # # # # # #

        cost_sum, value_sum, god_cost_sum, god_value_sum, completion_sum, available_sum, total_tasks = 0.0, 0.0, 0.0, 0.0, 0, 0, 0
        for team in POM3_TEAMS.teams:
            cost_sum += team.cost_total
            value_sum += team.value_total
            available_sum += team.numAvailableTasks
            completion_sum += team.numCompletedTasks
            for task in team.tasks:
                if task.val.visible:
                    total_tasks += 1

            for task in team.tasks:
                if task.val.done:
                    god_cost_sum += task.val.cost
                    god_value_sum += task.val.value

        if cost_sum == 0:
            our_frontier = 0.0
        else:
            our_frontier = value_sum / cost_sum

        if god_cost_sum == 0:
            god_frontier = 0.0
        else:
            god_frontier = god_value_sum / god_cost_sum

        if god_frontier == 0.0:
            score = 0.0
        else:
            score = our_frontier / god_frontier

        # print
        # "cost",cost_sum,"value",value_sum,"completion",completion_sum,"avaiable",available_sum,"tot
        # tasks",total_tasks
        if completion_sum == 0:
            cost = 0
        else:
            cost = cost_sum / completion_sum

        if available_sum == 0:
            idle = 0
        else:
            idle = 1 - completion_sum / float(available_sum)

        if total_tasks == 0:
            completion = 0
        else:
            completion = completion_sum / float(total_tasks)

        # return [cost, score, completion, idle]
        return [cost, completion, idle]
  def simulate(p3, inputs):

    # # # # # # # # # # #
    # 0) Initialization #
    # # # # # # # # # # #

    POM3_DECISIONS = pom3_decisions(inputs)
    numberOfShuffles = random.randint(2, 6)

    # # # # # # # # # # # # # # #
    # 1) Generate Requirements  #
    # # # # # # # # # # # # # # #

    POM3_REQUIREMENTS = pom3_requirements(POM3_DECISIONS)

    # # # # # # # # # # #
    # 2) Generate Teams #
    # # # # # # # # # # #

    POM3_TEAMS = pom3_teams(POM3_REQUIREMENTS, POM3_DECISIONS)

    # # # # # # # #
    # 3) Shuffle  #
    # # # # # # # #

    for shufflingIteration in range(numberOfShuffles):
      for team in POM3_TEAMS.teams:
        team.updateBudget(numberOfShuffles)
        team.collectAvailableTasks(POM3_REQUIREMENTS)
        team.applySortingStrategy()
        team.executeAvailableTasks()
        team.discoverNewTasks()
        team.updateTasks()

    # # # # # # # # # # # # #
    # 4) Objective Scoring  #
    # # # # # # # # # # # # #

    cost_sum, value_sum, god_cost_sum, god_value_sum, completion_sum, available_sum, total_tasks = 0.0, 0.0, 0.0, 0.0, 0, 0, 0
    for team in POM3_TEAMS.teams:
      cost_sum += team.cost_total
      value_sum += team.value_total
      available_sum += team.numAvailableTasks
      completion_sum += team.numCompletedTasks
      for task in team.tasks:
        if task.val.visible:
          total_tasks += 1

      for task in team.tasks:
        if task.val.done:
          god_cost_sum += task.val.cost
          god_value_sum += task.val.value

    if cost_sum == 0:
      our_frontier = 0.0
    else:
      our_frontier = value_sum / cost_sum

    if god_cost_sum == 0:
      god_frontier = 0.0
    else:
      god_frontier = god_value_sum / god_cost_sum

    if god_frontier == 0.0:
      score = 0.0
    else:
      score = our_frontier / god_frontier

    # print
    # "cost",cost_sum,"value",value_sum,"completion",completion_sum,"avaiable",available_sum,"tot
    # tasks",total_tasks
    if completion_sum == 0:
      cost = 0
    else:
      cost = cost_sum / completion_sum

    if available_sum == 0:
      idle = 0
    else:
      idle = 1 - completion_sum / float(available_sum)

    if total_tasks == 0:
      completion = 0
    else:
      completion = completion_sum / float(total_tasks)

    # return [cost, score, completion, idle]
    return [cost, completion, idle]