mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	Add support for the AMPL modeling and script language
This commit is contained in:
		| @@ -41,6 +41,16 @@ AGS Script: | ||||
|   tm_scope: source.c++ | ||||
|   ace_mode: c_cpp | ||||
|  | ||||
| AMPL: | ||||
|   type: programming | ||||
|   color: "#00008B" | ||||
|   extensions: | ||||
|   - .ampl | ||||
|   - .dat | ||||
|   - .mod | ||||
|   - .run | ||||
|   ace_mode: text | ||||
|  | ||||
| ANTLR: | ||||
|   type: programming | ||||
|   color: "#9DC3FF" | ||||
|   | ||||
							
								
								
									
										32
									
								
								samples/AMPL/diet.dat
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								samples/AMPL/diet.dat
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,32 @@ | ||||
|  | ||||
| param:  FOOD:                    cost  f_min  f_max := | ||||
|   "Quarter Pounder w/ Cheese"    1.84     .      . | ||||
|   "McLean Deluxe w/ Cheese"      2.19     .      . | ||||
|   "Big Mac"                      1.84     .      . | ||||
|   "Filet-O-Fish"                 1.44     .      . | ||||
|   "McGrilled Chicken"            2.29     .      . | ||||
|   "Fries, small"                  .77     .      . | ||||
|   "Sausage McMuffin"             1.29     .      . | ||||
|   "1% Lowfat Milk"                .60     .      . | ||||
|   "Orange Juice"                  .72     .      . ; | ||||
|  | ||||
| param:  NUTR:   n_min  n_max := | ||||
|         Cal      2000      . | ||||
|         Carbo     350    375  | ||||
|         Protein    55      . | ||||
|         VitA      100      . | ||||
|         VitC      100      . | ||||
|         Calc      100      . | ||||
|         Iron      100      . ; | ||||
|       | ||||
| param amt (tr): | ||||
|                                Cal  Carbo Protein   VitA   VitC  Calc  Iron := | ||||
|   "Quarter Pounder w/ Cheese"  510     34     28     15      6    30    20  | ||||
|   "McLean Deluxe w/ Cheese"    370     35     24     15     10    20    20  | ||||
|   "Big Mac"                    500     42     25      6      2    25    20  | ||||
|   "Filet-O-Fish"               370     38     14      2      0    15    10  | ||||
|   "McGrilled Chicken"          400     42     31      8     15    15     8  | ||||
|   "Fries, small"               220     26      3      0     15     0     2  | ||||
|   "Sausage McMuffin"           345     27     15      4      0    20    15  | ||||
|   "1% Lowfat Milk"             110     12      9     10      4    30     0  | ||||
|   "Orange Juice"                80     20      1      2    120     2     2 ; | ||||
							
								
								
									
										27
									
								
								samples/AMPL/diet.mod
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								samples/AMPL/diet.mod
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,27 @@ | ||||
|  | ||||
| set NUTR ordered; | ||||
| set FOOD ordered; | ||||
|  | ||||
| param cost {FOOD} >= 0; | ||||
| param f_min {FOOD} >= 0, default 0; | ||||
| param f_max {j in FOOD} >= f_min[j], default Infinity; | ||||
|  | ||||
| param n_min {NUTR} >= 0, default 0; | ||||
| param n_max {i in NUTR} >= n_min[i], default Infinity; | ||||
|  | ||||
| param amt {NUTR,FOOD} >= 0; | ||||
|  | ||||
| # -------------------------------------------------------- | ||||
|  | ||||
| var Buy {j in FOOD} integer >= f_min[j], <= f_max[j]; | ||||
|  | ||||
| # -------------------------------------------------------- | ||||
|  | ||||
| minimize Total_Cost:  sum {j in FOOD} cost[j] * Buy[j]; | ||||
|  | ||||
| minimize Nutr_Amt {i in NUTR}: sum {j in FOOD} amt[i,j] * Buy[j]; | ||||
|  | ||||
| # -------------------------------------------------------- | ||||
|  | ||||
| subject to Diet {i in NUTR}: | ||||
|    n_min[i] <= sum {j in FOOD} amt[i,j] * Buy[j] <= n_max[i]; | ||||
							
								
								
									
										25
									
								
								samples/AMPL/diet.run
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								samples/AMPL/diet.run
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,25 @@ | ||||
| model diet.mod; | ||||
| data diet2.dat; | ||||
|  | ||||
| param N symbolic in NUTR; | ||||
| param nstart > 0; | ||||
| param nstep > 0; | ||||
| read N, nstart, nstep <- ;   # read data interactively | ||||
|  | ||||
| set N_MAX default {}; | ||||
| param N_obj {N_MAX}; | ||||
| param N_dual {N_MAX}; | ||||
| option solver_msg 0; | ||||
|  | ||||
| for {i in nstart .. 0 by -nstep} { | ||||
|    let n_max[N] := i; | ||||
|    solve; | ||||
|    if solve_result = "infeasible" then { | ||||
|       printf "--- infeasible at %d ---\n\n", i; | ||||
|       break; | ||||
|    } | ||||
|    let N_MAX := N_MAX union {i}; | ||||
|    let N_obj[i] := Total_Cost; | ||||
|    let N_dual[i] := Diet[N].dual; | ||||
| } | ||||
| display N_obj, N_dual; | ||||
							
								
								
									
										25
									
								
								samples/AMPL/toy.ampl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								samples/AMPL/toy.ampl
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,25 @@ | ||||
| # A toy knapsack problem from the LocalSolver docs written in AMPL. | ||||
|  | ||||
| set I; | ||||
| param Value{I}; | ||||
| param Weight{I}; | ||||
| param KnapsackBound; | ||||
| var Take{I} binary; | ||||
|  | ||||
| maximize TotalValue: sum{i in I} Take[i] * Value[i]; | ||||
| s.t. WeightLimit: sum{i in I} Take[i] * Weight[i] <= KnapsackBound; | ||||
|  | ||||
| data; | ||||
|  | ||||
| param: | ||||
| I: Weight Value := | ||||
| 0    10     1 | ||||
| 1    60    10 | ||||
| 2    30    15 | ||||
| 3    40    40 | ||||
| 4    30    60 | ||||
| 5    20    90 | ||||
| 6    20   100 | ||||
| 7     2    15; | ||||
|  | ||||
| param KnapsackBound := 102; | ||||
		Reference in New Issue
	
	Block a user