-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcourse_scheduling-after.py
81 lines (63 loc) · 2 KB
/
course_scheduling-after.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
from __future__ import division
import pulp
import sys
import math
#get number of courses and classes
num_courses = int(raw_input("enter number of courses: "))
num_classes = int(raw_input("enter number of classes: "))
class_cap = [0 for i in range(num_classes)]
course_cap = [0 for i in range(num_courses)]
#get class capacities
print("class capacities: ")
for i in range(0, num_classes):
_input = raw_input()
class_index = int(_input.split(' ', 1 )[0])-1
class_capacity = int(_input.split(' ', 1 )[1])
class_cap[class_index] = class_capacity
#get course enrollments
print("course enrollments: ")
for i in range(0, num_courses):
_input = raw_input()
course_index = int(_input.split(' ', 1 )[0])-1
course_enrollments = int(_input.split(' ', 1 )[1])
course_cap[course_index] = course_enrollments
#Creates an LP Problem
lp_prob = pulp.LpProblem("course scheduling Problem", pulp.LpMinimize)
#Define variables
x = [[0 for i in range(num_courses)] for j in range(num_classes)]
for i in range(0, num_courses):
for j in range(0, num_classes):
x[i][j] = pulp.LpVariable("x_"+str(i)+"_"+str(j), lowBound=0, upBound=1, cat='Binary')
#Define Object
sum_object = 0;
for i in range(0, num_courses):
for j in range(0, num_classes):
c_ij = class_cap[j] / course_cap[i]
sum_object += c_ij*x[i][j]*100
lp_prob += sum_object
#Define constraints
#condition 1
for i in range(0, num_courses):
sum_xi=0
for j in range(0, num_classes):
sum_xi+= x[i][j]
lp_prob += sum_xi ==1
#condition 2
for j in range(0, num_classes):
sum_xj=0
for i in range(0, num_courses):
sum_xj+= x[i][j]
lp_prob += sum_xj <=1
#condition 3
sum_T=0;
for i in range(0, num_courses):
for j in range(0, num_classes):
if(course_cap[i]>class_cap[j]):
sum_T += x[i][j]
lp_prob += sum_T ==0
#solve problem
lp_prob.solve()
#print resutls
for v in lp_prob.variables():
print(v.name, "=", v.varValue)
print("Total Cost =", math.ceil(pulp.value(lp_prob.objective)))