You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							67 lines
						
					
					
						
							1.6 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							67 lines
						
					
					
						
							1.6 KiB
						
					
					
				
								/* CPP, Critical Path Problem */
							 | 
						|
								
							 | 
						|
								/* Written in GNU MathProg by Andrew Makhorin <mao@gnu.org> */
							 | 
						|
								
							 | 
						|
								/* Note: Reduced costs of auxiliary variables phi[j,k] (see below)
							 | 
						|
								         can be only zero or one. The critical path is defined by the
							 | 
						|
								         constraints, whose reduced cost is one. */
							 | 
						|
								
							 | 
						|
								set J;
							 | 
						|
								/* set of jobs (activities) */
							 | 
						|
								
							 | 
						|
								set P{j in J}, in J, default {};
							 | 
						|
								/* P[j] is a subset of jobs that immediately precede job j */
							 | 
						|
								
							 | 
						|
								param t{j in J}, >= 0;
							 | 
						|
								/* duration required to perform job j */
							 | 
						|
								
							 | 
						|
								var x{j in J}, >= 0;
							 | 
						|
								/* starting time of job j */
							 | 
						|
								
							 | 
						|
								s.t. phi{j in J, k in P[j]}: x[j] >= x[k] + t[k];
							 | 
						|
								/* job j can start only after all immediately preceding jobs have been
							 | 
						|
								   completely performed */
							 | 
						|
								
							 | 
						|
								var z;
							 | 
						|
								/* project makespan */
							 | 
						|
								
							 | 
						|
								s.t. fin{j in J}: z >= x[j] + t[j];
							 | 
						|
								/* which is the maximum of the completion times of all the jobs */
							 | 
						|
								
							 | 
						|
								minimize obj: z;
							 | 
						|
								/* the objective is make z as small as possible */
							 | 
						|
								
							 | 
						|
								data;
							 | 
						|
								
							 | 
						|
								/* The optimal solution is 46 */
							 | 
						|
								
							 | 
						|
								param : J :  t :=
							 | 
						|
								        A    3    /* Excavate */
							 | 
						|
								        B    4    /* Lay foundation */
							 | 
						|
								        C    3    /* Rough plumbing */
							 | 
						|
								        D   10    /* Frame */
							 | 
						|
								        E    8    /* Finish exterior */
							 | 
						|
								        F    4    /* Install HVAC */
							 | 
						|
								        G    6    /* Rough electric */
							 | 
						|
								        H    8    /* Sheet rock */
							 | 
						|
								        I    5    /* Install cabinets */
							 | 
						|
								        J    5    /* Paint */
							 | 
						|
								        K    4    /* Final plumbing */
							 | 
						|
								        L    2    /* Final electric */
							 | 
						|
								        M    4    /* Install flooring */
							 | 
						|
								;
							 | 
						|
								
							 | 
						|
								set P[B] := A;
							 | 
						|
								set P[C] := B;
							 | 
						|
								set P[D] := B;
							 | 
						|
								set P[E] := D;
							 | 
						|
								set P[F] := D;
							 | 
						|
								set P[G] := D;
							 | 
						|
								set P[H] := C E F G;
							 | 
						|
								set P[I] := H;
							 | 
						|
								set P[J] := H;
							 | 
						|
								set P[K] := I;
							 | 
						|
								set P[L] := J;
							 | 
						|
								set P[M] := K L;
							 | 
						|
								
							 | 
						|
								end;
							 |