-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathsample.py
executable file
·63 lines (50 loc) · 1.13 KB
/
sample.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
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# i: arbeit_i N
# j: day 7
# k: time 3
#
# S_ijk: Satisfaction of member i join at day j and k.
# x_ijk: 1 or 0
#
# Conditions:
# sum x_ijk > 3
# i
#
import numpy as np
import pulp
N = 5
D = 7
T = 2
S = np.random.rand(N, D, T) - 0.5
var = pulp.LpVariable.dicts('VAR', (range(N), range(D), range(T)), 0, 1, 'Binary')
obj = None
for i in range(N):
for j in range(D):
for k in range(T):
obj += S[i][j][k] * var[i][j][k]
problem = pulp.LpProblem('shift', pulp.LpMaximize)
problem += obj
for j in range(D):
for k in range(T):
c = None
for i in range(N):
c += var[i][j][k]
problem += c >= 3
print problem
status = problem.solve()
print "Status", pulp.LpStatus[status]
print "----------"
print "Result"
for i in range(N):
print "Member{}".format(i)
for j in range(D):
print "{}day".format(j),
for k in range(T):
status = "NO"
if var[i][j][k].value() > 0.0:
status = "OK"
print "Time{} => {},".format(k, status),
print ""
print ""