Question: from pulp import LpProblem, LpMinimize, LpVariable, lpSum, value # Define activity data activities = { A : { predecessors : [

from pulp import LpProblem, LpMinimize, LpVariable, lpSum, value
# Define activity data
activities ={
"A": {"predecessors": [], "normal_cost": 200000, "normal_duration": 5, "crash_once_cost": 10000, "crash_once_duration": 4, "crash_twice_cost": 10000, "crash_twice_duration": 3},
"B": {"predecessors": ["A"], "normal_cost": 50000, "normal_duration": 6, "crash_once_cost": 15000, "crash_once_duration": 5, "crash_twice_cost": 15000, "crash_twice_duration": 4},
"C": {"predecessors": ["A"], "normal_cost": 250000, "normal_duration": 4, "crash_once_cost": 5000, "crash_once_duration": 3, "crash_twice_cost": 5000, "crash_twice_duration": 2},
"D": {"predecessors": ["A"], "normal_cost": 100000, "normal_duration": 5, "crash_once_cost": 15000, "crash_once_duration": 4, "crash_twice_cost": 15000, "crash_twice_duration": 3},
"E": {"predecessors": ["B"], "normal_cost": 25000, "normal_duration": 9, "crash_once_cost": 15000, "crash_once_duration": 8, "crash_twice_cost": 15000, "crash_twice_duration": 7},
"F": {"predecessors": ["B","C"], "normal_cost": 75000, "normal_duration": 7, "crash_once_cost": 7500, "crash_once_duration": 6, "crash_twice_cost": 7500, "crash_twice_duration": 5},
"G": {"predecessors": ["C"], "normal_cost": 125000, "normal_duration": 6, "crash_once_cost": 10000, "crash_once_duration": 5, "crash_twice_cost": 10000, "crash_twice_duration": 4},
"H": {"predecessors": ["C","D"], "normal_cost": 100000, "normal_duration": 8, "crash_once_cost": 15000, "crash_once_duration": 7, "crash_twice_cost": 15000, "crash_twice_duration": 6},
"I": {"predecessors": ["D"], "normal_cost": 20000, "normal_duration": 3, "crash_once_cost": 10000, "crash_once_duration": 2, "crash_twice_cost": 10000, "crash_twice_duration": 1},
"J": {"predecessors": ["E","F","G"], "normal_cost": 75000, "normal_duration": 7, "crash_once_cost": 2500, "crash_once_duration": 6, "crash_twice_cost": 2500, "crash_twice_duration": 5},
"K": {"predecessors": ["F","G","H"], "normal_cost": 50000, "normal_duration": 4, "crash_once_cost": 10000, "crash_once_duration": 3, "crash_twice_cost": 10000, "crash_twice_duration": 2},
"L": {"predecessors": ["H", "I"], "normal_cost": 20000, "normal_duration": 1, "crash_once_cost": 0, "crash_once_duration": 0, "crash_twice_cost": 0, "crash_twice_duration": 0},
"M": {"predecessors": ["K","L"], "normal_cost": 25000, "normal_duration": 2, "crash_once_cost": 25000, "crash_once_duration": 1, "crash_twice_cost": 0, "crash_twice_duration": 0},
}
# Define predecessors
predecessors ={
"A": [],
"B": ["A"],
"C": ["A"],
"D": ["A"],
"E": ["B"],
"F": ["B","C"],
"G": ["C"],
"H": ["C","D"],
"I": ["D"],
"J": ["E","F","G"],
"K": ["F","G","H"],
"L": ["H", "I"],
"M": ["K","L"],
}
# Function to find the critical path
def find_critical_path(activities, predecessors):
critical_path =[]
visited = set()
def dfs(activity):
visited.add(activity)
if not predecessors[activity]:
return [(activity, activities[activity]["normal_duration"])]
max_duration =0
max_path =[]
for predecessor in predecessors[activity]:
if predecessor not in visited:
path = dfs(predecessor)
duration = sum([p[1] for p in path])+ activities[activity]["normal_duration"]
if duration > max_duration:
max_duration = duration
max_path = path +[(activity, activities[activity]["normal_duration"])]
return max_path
for activity in activities:
path = dfs(activity)
if sum([p[1] for p in path])> sum([p[1] for p in critical_path]):
critical_path = path
return [p[0] for p in critical_path]
# Define the problem
prob = LpProblem("ProjectCrashing", LpMinimize)
# Define decision variables
crash_once = LpVariable.dicts("CrashOnce", activities.keys(), lowBound=0, upBound=1, cat='Binary')
crash_twice = LpVariable.dicts("CrashTwice", activities.keys(), lowBound=0, upBound=1, cat='Binary')
# Define objective function
prob += lpSum(
crash_once[activity]* activities[activity]["crash_once_cost"]+
crash_twice[activity]* activities[activity]["crash_twice_cost"]
for activity in activities
)
# Define constraints
for activity in activities:
for predecessor in predecessors[activity]:
prob +=(
(activities[activity]["normal_duration"]- crash_once[activity]* activities[activity]["crash_once_duration"]- crash_twice[activity]* activities[activity]["crash_twice_duration"])<=
(activities[predecessor]["normal_duration"]- crash_once[predecessor]* activities<

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related General Management Questions!