Python Pulp LP оставляя комнаты без назначения и штрафы/ограничения, не предотвращающие этоPython

Программы на Python
Anonymous
 Python Pulp LP оставляя комнаты без назначения и штрафы/ограничения, не предотвращающие это

Сообщение Anonymous »

У меня трудно получить все классные комнаты, которые будут назначены в класс для проблемы с заданием комнаты. Я использую сетку, рассчитанную на основе классовой емкости и комнатной емкости (значения 0-1). В частности, он оставляет много классов, не назначенными, даже когда есть комната, в которой они могут разместить их (особенно комнаты, в которых содержится 110, поскольку самая высокая классовая мощность составляет 90). Я пробовал наказывать незнашиваемые занятия, но каждый раз получаю одинаковую оценку максимизации, поэтому что -то очень сломано. Любая помощь ценится! (90) и отдельный DF доступных классных комнат и их возможности (RM 101, 110; RM 102, 80; RM 103, 35). < /P>
import pandas as pd
from pulp import LpMaximize, LpProblem, LpVariable, lpSum, value
import re

## Define the optimization problem
def solve_optimization(include_back_to_back=True):
print("Starting optimization...")
prob = LpProblem("Classroom_Assignment", LpMaximize)

# Define decision variables
x = LpVariable.dicts("classroom_assignment", [(c, r) for c in classes for r in rooms], cat='Binary')

# Constraints
print("Reviewing Constraints...")

# Must assign all classes
###HELP! Nothing I am doing works....

# Each class is assigned to exactly one room
for c in classes:
prob += lpSum(x[(c, r)] for r in rooms) == 1, f"Class_Assigned_{c}" #label

# Maximum enrollment must be equal to or below room capacity
for c in classes:
if not this_year_df_filtered[this_year_df_filtered['Class'] == c].empty:
max_enrollment = this_year_df_filtered[this_year_df_filtered['Class'] == c].iloc[0]['Rm Cap Request']
for r in rooms:
prob += (x[(c, r)] * max_enrollment

Подробнее здесь: https://stackoverflow.com/questions/793 ... preventing

Вернуться в «Python»