mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			59 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Modula-2
		
	
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Modula-2
		
	
	
	
	
	
param num_beams;                  # number of beams
 | 
						|
 | 
						|
param num_rows >= 1, integer;     # number of rows
 | 
						|
param num_cols >= 1, integer;     # number of columns 
 | 
						|
 | 
						|
set BEAMS   := 1 .. num_beams;    # set of beams
 | 
						|
 | 
						|
set ROWS    := 1 .. num_rows;	  # set of rows
 | 
						|
set COLUMNS := 1 .. num_cols;	  # set of columns
 | 
						|
 | 
						|
# values for entries of each beam
 | 
						|
param beam_values {BEAMS, ROWS, COLUMNS} >= 0; 
 | 
						|
 | 
						|
# values of tumor
 | 
						|
param tumor_values {ROWS, COLUMNS} >= 0; 
 | 
						|
 | 
						|
# values of critical area
 | 
						|
param critical_values {ROWS, COLUMNS} >= 0; 
 | 
						|
 | 
						|
# critical maximum dosage requirement
 | 
						|
param critical_max;
 | 
						|
 | 
						|
# tumor minimum dosage requirement
 | 
						|
param tumor_min;
 | 
						|
 | 
						|
# dosage scalar of each beam
 | 
						|
var X {i in BEAMS} >= 0;
 | 
						|
 | 
						|
 | 
						|
# define the tumor area which includes the locations where tumor exists
 | 
						|
set tumor_area := {k in ROWS, h in COLUMNS: tumor_values[k,h] > 0};
 | 
						|
 | 
						|
# define critical area 
 | 
						|
set critical_area := {k in ROWS, h in COLUMNS: critical_values[k,h] > 0};
 | 
						|
 | 
						|
var S {(k,h) in tumor_area} >= 0;
 | 
						|
var T {(k,h) in critical_area} >= 0;
 | 
						|
 | 
						|
# maximize total dosage in tumor area
 | 
						|
maximize total_tumor_dosage: sum {i in BEAMS} sum {(k,h) in tumor_area} X[i] * beam_values[i,k,h];
 | 
						|
 | 
						|
# minimize total dosage in critical area
 | 
						|
minimize total_critical_dosage: sum {i in BEAMS} sum {(k,h) in critical_area} X[i] * beam_values[i,k,h];
 | 
						|
 | 
						|
# minimize total tumor slack
 | 
						|
minimize total_tumor_slack: sum {(k,h) in tumor_area} S[k,h];
 | 
						|
 | 
						|
# minimize total critical area slack
 | 
						|
minimize total_critical_slack: sum {(k,h) in critical_area} T[k,h];
 | 
						|
 | 
						|
# total dosage at each tumor location [k,h] should be >= min tumor dosage with slack variable
 | 
						|
subject to tumor_limit {(k,h) in tumor_area} : sum {i in BEAMS} X[i] * beam_values[i,k,h] == tumor_min - S[k,h];
 | 
						|
 | 
						|
# total dosage at each critical location [k,h] should be = max critical dosage with slack variable
 | 
						|
subject to critical_limit {(k,h) in critical_area} : sum {i in BEAMS} X[i] * beam_values[i,k,h] == critical_max + T[k,h];
 | 
						|
 | 
						|
 | 
						|
 |