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: "normalcost: "normalduration": "crashoncecost: "crashonceduration": "crashtwicecost: "crashtwiceduration":
B: predecessors: A "normalcost: "normalduration": "crashoncecost: "crashonceduration": "crashtwicecost: "crashtwiceduration":
C: predecessors: A "normalcost: "normalduration": "crashoncecost: "crashonceduration": "crashtwicecost: "crashtwiceduration":
D: predecessors: A "normalcost: "normalduration": "crashoncecost: "crashonceduration": "crashtwicecost: "crashtwiceduration":
E: predecessors: B "normalcost: "normalduration": "crashoncecost: "crashonceduration": "crashtwicecost: "crashtwiceduration":
F: predecessors: BC "normalcost: "normalduration": "crashoncecost: "crashonceduration": "crashtwicecost: "crashtwiceduration":
G: predecessors: C "normalcost: "normalduration": "crashoncecost: "crashonceduration": "crashtwicecost: "crashtwiceduration":
H: predecessors: CD "normalcost: "normalduration": "crashoncecost: "crashonceduration": "crashtwicecost: "crashtwiceduration":
"I": predecessors: D "normalcost: "normalduration": "crashoncecost: "crashonceduration": "crashtwicecost: "crashtwiceduration":
J: predecessors: EFG "normalcost: "normalduration": "crashoncecost: "crashonceduration": "crashtwicecost: "crashtwiceduration":
K: predecessors: FGH "normalcost: "normalduration": "crashoncecost: "crashonceduration": "crashtwicecost: "crashtwiceduration":
L: predecessors: H "I" "normalcost: "normalduration": "crashoncecost: "crashonceduration": "crashtwicecost: "crashtwiceduration":
M: predecessors: KL "normalcost: "normalduration": "crashoncecost: "crashonceduration": "crashtwicecost: "crashtwiceduration":
# Define predecessors
predecessors
A:
B: A
C: A
D: A
E: B
F: BC
G: C
H: CD
"I": D
J: EFG
K: FGH
L: H "I"
M: KL
# Function to find the critical path
def findcriticalpathactivities predecessors:
criticalpath
visited set
def dfsactivity:
visited.addactivity
if not predecessorsactivity:
return activity activitiesactivitynormalduration"
maxduration
maxpath
for predecessor in predecessorsactivity:
if predecessor not in visited:
path dfspredecessor
duration sump for p in path activitiesactivitynormalduration"
if duration maxduration:
maxduration duration
maxpath path activity activitiesactivitynormalduration"
return maxpath
for activity in activities:
path dfsactivity
if sump for p in path sump for p in criticalpath:
criticalpath path
return p for p in criticalpath
# Define the problem
prob LpProblemProjectCrashing LpMinimize
# Define decision variables
crashonce LpVariable.dictsCrashOnce activities.keys lowBound upBound cat'Binary'
crashtwice LpVariable.dictsCrashTwice activities.keys lowBound upBound cat'Binary'
# Define objective function
prob lpSum
crashonceactivity activitiesactivitycrashoncecost
crashtwiceactivity activitiesactivitycrashtwicecost
for activity in activities
# Define constraints
for activity in activities:
for predecessor in predecessorsactivity:
prob
activitiesactivitynormalduration" crashonceactivity activitiesactivitycrashonceduration" crashtwiceactivity activitiesactivitycrashtwiceduration"
activitiespredecessornormalduration" crashoncepredecessor activities<
Step by Step Solution
There are 3 Steps involved in it
1 Expert Approved Answer
Step: 1 Unlock
Question Has Been Solved by an Expert!
Get step-by-step solutions from verified subject matter experts
Step: 2 Unlock
Step: 3 Unlock
