Turn on suggestions

Auto-suggest helps you quickly narrow down your search results by suggesting possible matches as you type.

Showing results for

Options

- RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Mute
- Printer Friendly Page

☑ This topic is **solved**.
Need further help from the community? Please
sign in and ask a **new** question.

- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content

Posted 07-05-2022 05:07 AM
(686 views)

Hi Rob

This is continuation of the old problem

Here is one shipment that I was testing: Please find data attached. I have only 1 shipment that has 32 Vol and 15000 Weight.

Here is my code. I have used green color to highlight my pain points:

```
proc optmodel;
set <str> ORG;
read data CASUSER.Unique_ORG into ORG = [ORG];
set <str> DES;
read data CASUSER.Unique_DES into DES = [DES];
set <str> BOX;
read data CASUSER.Unique_BOX into BOX = [BOX];
/*Read ISN Wt and Volume for a given ISN* - START */
set <str> ISN;
str Org_ISN {ISN};
str Des_ISN {ISN};
num Volume_ISN {ISN} init 0;
num Weight_ISN {ISN} init 0;
read data CASUSER.InputData_AssetMix into ISN=[ISN] Org_ISN=ORG Des_ISN=DES Volume_ISN=Volume Weight_ISN=Weight;
/*Read ISN Wt and Volume for a given ISN* - END*/
/*Read Wt and Volume Capacity for a given ORG, DES, BOX - START */
num Volume_Capacity {ORG,DES,BOX} init 0; num Volume_Min {ORG,DES,BOX} init 0;
num Weight_Capacity {ORG,DES,BOX} init 0; num Weight_Min {ORG,DES,BOX} init 0;
read data CASUSER.BOXSPECS into [ORG DES BOX]
Volume_Capacity=Volume_Capacity
Weight_Capacity=Weight_Capacity
Volume_Min=Volume_Min
Weight_Min=Weight_Min;
/*Read Wt and Volume Capacity for a given ORG, DES, BOX - END */
/* A Binary variable that is 0 or 1 for a given asset for a given lane, 0 indicated not available, 1- available */
num Is_BoxAvalable_for_a_lane {ORG,DES,Box};
read data CASUSER.BOXSpecs into [ORG Des Box] Is_BoxAvalable_for_a_lane = BoxAvailability;
/* Decision Variable - START */
var BoxesNeeded {ISN,BOX}>=0 integer;
/* Decision Variable - END */
/*Define Rates and Implicit Variables - START */
set <str,str,str> PerBox_Based_Rate_NoZeroes;
num PerBox_Based_Rate {PerBox_Based_Rate_NoZeroes};
read data CASUSER.BOXRATE
(where=(RateBasis="PerBox" and Ratetype='Linehaul' and Rate>0))
into PerBox_Based_Rate_NoZeroes=[ORG DES BOX] PerBox_Based_Rate=Rate;
impvar PerBox_Based_Costs = sum {i in ISN, b in BOX: <Org_ISN[i],Des_ISN[i],b> in PerBox_Based_Rate_NoZeroes}
PerBox_Based_Rate[Org_ISN[i],Des_ISN[i],b] * BoxesNeeded[i,b];
set <str,str,str> PerVol_Based_Rate_NoZeroes;
num PerVol_Based_Rate {PerVol_Based_Rate_NoZeroes};
read data CASUSER.BOXRATE
(where=(RateBasis="PerVolUOM" and Ratetype='Linehaul' and Rate>0))
into PerVol_Based_Rate_NoZeroes=[ORG DES BOX] PerVol_Based_Rate=Rate;
impvar PerVol_Based_Costs = sum {i in ISN, b in BOX: <Org_ISN[i],Des_ISN[i],b> in PerVol_Based_Rate_NoZeroes}
PerVol_Based_Rate[Org_ISN[i],Des_ISN[i],b] * BoxesNeeded[i,b];
set <str,str,str> PerWeight_Based_Rate_NoZeroes;
num PerWeight_Based_Rate {PerWeight_Based_Rate_NoZeroes};
read data CASUSER.BOXRATE
(where=(RateBasis="PerWtUOM" and Ratetype='Linehaul' and Rate>0))
into PerWeight_Based_Rate_NoZeroes=[ORG DES BOX] PerWeight_Based_Rate=Rate;
impvar PerWeight_Based_Costs = sum {i in ISN, b in BOX: <Org_ISN[i],Des_ISN[i],b> in PerWeight_Based_Rate_NoZeroes}
PerWeight_Based_Rate[Org_ISN[i],Des_ISN[i],b] * Weight_ISN[i]*BoxesNeeded[i,b];
/*Define Implicit Variables - END */
Min TotalCost = PerBox_Based_Costs + PerVol_Based_Costs+PerWeight_Based_Costs;
/* Constraints - START */
for {i in ISN, b in BOX: Is_BoxAvalable_for_a_lane[Org_ISN[i],Des_ISN[i],b] = 0}
fix BoxesNeeded[i,b] = 0;
con Volume_Constraint {i in ISN}:
sum {b in BOX} Volume_Capacity[Org_ISN[i],Des_ISN[i],b] * BoxesNeeded[i,b] >= Volume_ISN[i];
con Weight_Constraint {i in ISN}:
sum {b in BOX} Weight_Capacity[Org_ISN[i],Des_ISN[i],b] * BoxesNeeded[i,b] >= Weight_ISN[i];
con Volume_Constraint_MinThreshold {i in ISN}:
sum {b in BOX} Volume_Min[Org_ISN[i],Des_ISN[i],b]*BoxesNeeded[i,b] <=Volume_ISN[i];
con Weight_Constraint_MinThreshold {i in ISN}:
sum {b in BOX} Weight_Min[Org_ISN[i],Des_ISN[i],b]*BoxesNeeded[i,b] <= Weight_ISN[i];
/* Constraints - END */
expand;
solve with milp / decomp=(method=concomp);
print BoxesNeeded;
/*Output Processing within OPTMODEL*/
create data OptMix_RESULTS_Volume (where=(BoxesNeeded > 0.05)) from
[ISN=i BOX=b]={i in ISN, b in BOX: <Org_ISN[i],Des_ISN[i],b> in PerVol_Based_Rate_NoZeroes}
Org=ORG_ISN[i]
Des=DES_ISN[i]
ShipmentVolume=Volume_ISN[i]
ShipmentWeight=Weight_ISN[i]
BoxesNeeded
Volume_Capacity[Org_ISN[i],Des_ISN[i],b]
Weight_Capacity[Org_ISN[i],Des_ISN[i],b]
VolumeThresholdMinimum=Volume_Min[Org_ISN[i],Des_ISN[i],b]
WeightThresholdMinimum=Weight_Min[Org_ISN[i],Des_ISN[i],b]
Costs=(PerVol_Based_Rate[Org_ISN[i],Des_ISN[i],b] * BoxesNeeded[i,b])
DimsType='Vol'
DimsUsed=(Volume_Capacity[Org_ISN[i],Des_ISN[i],b] * BoxesNeeded[i,b])
;
create data OptMix_RESULTS_Weight (where=(BoxesNeeded > 0.05)) from
[ISN=i BOX=b]={i in ISN, b in BOX: <Org_ISN[i],Des_ISN[i],b> in PerWeight_Based_Rate_NoZeroes}
Org=ORG_ISN[i]
Des=DES_ISN[i]
ShipmentVolume=Volume_ISN[i]
ShipmentWeight=Weight_ISN[i]
BoxesNeeded
Volume_Capacity[Org_ISN[i],Des_ISN[i],b]
Weight_Capacity[Org_ISN[i],Des_ISN[i],b]
VolumeThresholdMinimum=Volume_Min[Org_ISN[i],Des_ISN[i],b]
WeightThresholdMinimum=Weight_Min[Org_ISN[i],Des_ISN[i],b]
Costs=(PerWeight_Based_Rate[Org_ISN[i],Des_ISN[i],b] * Weight_ISN[i]*BoxesNeeded[i,b])
DimsType='Wgt'
DimsUsed=(Weight_Capacity[Org_ISN[i],Des_ISN[i],b] * BoxesNeeded[i,b])
;
create data OptMix_RESULTS_box (where=(BoxesNeeded > 0.05)) from
[ISN=i BOX=b]={i in ISN, b in BOX: <Org_ISN[i],Des_ISN[i],b> in PerBox_Based_Rate_NoZeroes}
Org=ORG_ISN[i]
Des=DES_ISN[i]
ShipmentVolume=Volume_ISN[i]
ShipmentWeight=Weight_ISN[i]
BoxesNeeded
Volume_Capacity[Org_ISN[i],Des_ISN[i],b]
Weight_Capacity[Org_ISN[i],Des_ISN[i],b]
VolumeThresholdMinimum=Volume_Min[Org_ISN[i],Des_ISN[i],b]
WeightThresholdMinimum=Weight_Min[Org_ISN[i],Des_ISN[i],b]
Costs=(PerBox_Based_Rate[Org_ISN[i],Des_ISN[i],b] * BoxesNeeded[i,b])
DimsType='Box'
DimsUsed=(Volume_Capacity[Org_ISN[i],Des_ISN[i],b] * BoxesNeeded[i,b])
;
```

I have two questions

When I ran the model, the model says 1X8T and 1X10T. The model says the total cost is $1050000.

The cost of a 8T is $40 per WeightUOM and cost of 10T is $30 per WeightUOM. So the model takes $70*15000 Kgs = $1,050,000.

I have 2 questions

(a) If I have correctly defined my Impvar PerWeight_Based_Costs.

`impvar PerWeight_Based_Costs= sum {i in ISN, b in BOX: <Org_ISN[i],Des_ISN[i],b> in PerWeight_Based_Rate_NoZeroes} PerWeight_Based_Rate[Org_ISN[i],Des_ISN[i],b] * Weight_ISN[i]*BoxesNeeded[i,b];`

When I expand i get Impvar PerWeight_Based_Costs =

600000*BoxesNeeded[SHA_LAX_2,'8T'] + 450000*BoxesNeeded[SHA_LAX_2,'10T'] + 300000* BoxesNeeded[SHA_LAX_2,'12T']

(b) In the Create Data Step, where I want to see how much Weight and Volume is being stuffed in each BOX, the DimsUsed (DimsUsed is WeightUsed in each box) is coming up as 8000 and 10000 for 8T and 10T that are just the capacities. What I really want is of the 15,000 Weight that the shipment is how much weight went into a 8T and how much went into a 10T. Then the total cost should be 8T_Weight*8T_Rate + 10T_Weight*10_Rate. But how do we know how much of a given shipment's weight and volume went into which container type. The Create data step needs to be modified. I am not sure how.

1 ACCEPTED SOLUTION

Accepted Solutions

- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content

OK, I think I understand what you want. You cannot separately assign volume and weight for the same item. I recommend introducing a new variable to represent the proportion of the item assigned to a box, along with implicit variables to represent the volume and weight:

```
var BoxesNeeded {ISN,BOX} >= 0 integer;
var Proportion {ISN,BOX} >= 0 <= 1;
impvar VolumeInsideBox {i in ISN, b in BOX} = Volume_ISN[i] * Proportion[i,b];
impvar WeightInsideBox {i in ISN, b in BOX} = Weight_ISN[i] * Proportion[i,b];
```

The implicit variables for costs are then as follows:

```
impvar PerVol_Based_Costs = sum {i in ISN, b in BOX: <Org_ISN[i],Des_ISN[i],b> in PerVol_Based_Rate_NoZeroes}
PerVol_Based_Rate[Org_ISN[i],Des_ISN[i],b] * VolumeInsideBox[i,b];
impvar PerWeight_Based_Costs = sum {i in ISN, b in BOX: <Org_ISN[i],Des_ISN[i],b> in PerWeight_Based_Rate_NoZeroes}
PerWeight_Based_Rate[Org_ISN[i],Des_ISN[i],b] * WeightInsideBox[i,b];
```

And the constraints are:

```
/* Constraints - START */
for {i in ISN, b in BOX: Is_BoxAvalable_for_a_lane[Org_ISN[i],Des_ISN[i],b] = 0}
fix BoxesNeeded[i,b] = 0;
con SumProportionToOne {i in ISN}:
sum {b in BOX} Proportion[i,b] = 1;
con Volume_Constraint {i in ISN, b in BOX}:
Volume_Capacity[Org_ISN[i],Des_ISN[i],b] * BoxesNeeded[i,b] >= VolumeInsideBox[i,b];
con Weight_Constraint {i in ISN, b in BOX}:
Weight_Capacity[Org_ISN[i],Des_ISN[i],b] * BoxesNeeded[i,b] >= WeightInsideBox[i,b];
con Volume_Constraint_MinThreshold {i in ISN, b in BOX}:
Volume_Min[Org_ISN[i],Des_ISN[i],b] * BoxesNeeded[i,b] <= VolumeInsideBox[i,b];
con Weight_Constraint_MinThreshold {i in ISN, b in BOX}:
Weight_Min[Org_ISN[i],Des_ISN[i],b] * BoxesNeeded[i,b] <= WeightInsideBox[i,b];
/* Constraints - END */
```

For your sample data, the resulting optimal solution has an objective value of 500,000 and uses 1x10T and 2x8T:

[1] | [2] | BoxesNeeded | Proportion | VolumeInsideBox | WeightInsideBox |
---|---|---|---|---|---|

SHA_LAX_2 | 10T | 1 | 0.66667 | 21.333 | 10000 |

SHA_LAX_2 | 12T | 0 | 0.00000 | 0.000 | 0 |

SHA_LAX_2 | 20F | 0 | 0.00000 | 0.000 | 0 |

SHA_LAX_2 | 40F | 0 | 0.00000 | 0.000 | 0 |

SHA_LAX_2 | 40H | 0 | 0.00000 | 0.000 | 0 |

SHA_LAX_2 | 45F | 0 | 0.00000 | 0.000 | 0 |

SHA_LAX_2 | 8T | 2 | 0.33333 | 10.667 | 5000 |

SHA_LAX_2 | LCL | 0 | 0.00000 | 0.000 | 0 |

SHA_LAX_2 | Level0 | 0 | 0.00000 | 0.000 | 0 |

SHA_LAX_2 | Level1 | 0 | 0.00000 | 0.000 | 0 |

SHA_LAX_2 | Level2 | 0 | 0.00000 | 0.000 | 0 |

Your proposed solution of 1x10T and 1x12T would have violated the minimum volume threshold of 36 (> 32) for 12T.

5 REPLIES 5

- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content

Hi Rob

I was thinking of a solution to the problem that I am trying to solve. Basically, for a given shipment, there are 3 types of costs available

- BoxBased Costs
- Volume Based Costs
- Weight Based Costs

The decision variable that we have is Box type and how many of them for a given shipment , ie BoxesNeeded [i,b] where i is shipment and b is box type. All were fine till we had BOxBased Cost and LCL as the only PerVol based costs. But when i had weight based costs and the minimum threshold constraint, i was losing track.

If you look at the dataset I sent earlier, it has only 1 shipment that has a volume of 32 and weight of 15000 kgs. the available boxes are 8T, 10T and 12T with a cost of $40 per kgs, $30 Per kgs and $20 per kgs respectively. 8T has a capacity of 8000 kgs, 10 T has a a capacity of 10000 kgs and 12T has 12000 Kgs . After this is the minimum threshold : 8T there is no minimum , 10T has a min of 2500 kgs and 12 T has a min of 4,200 kgs. 8T there is no minimum , 10T has a min of 21 cubic meter and 12 T has a min of 36 cubic meter.

Want to solve for how many boxes of each type will be needed to solve this problem, meeting the constraints. Based on my hand calcluations, 1X12T and 1X10T seems to be the cheapest way to ship this. But i am not sure how to fix it and so was I was thinking if we shd have another variable called Wt_inside_eachBox {ISN, BOX} as a decision variable

and have the impvar wt_based_costs = PetWtBasedRate * Wt_inside_eachBox. Am not sure if I am on the right track. Feeling little lost. Can u help me?

- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content

Yes, I think you will need another decision variable because the costs no longer depend on just the number of boxes used. If I understand correctly, you will need to keep track of individual boxes of the same type.

But I don't quite understand what your Volume_Constraint_MinThreshold and Weight_Constraint_MinThreshold constraints are intended to enforce. For example, can you please explain what "10T has a min of 2500 kgs" means?

- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content

Rob

Ok. Let me clarify/elaborate. When I said "10T has a min of 2500 kgs" what i meant is that the BoxType 10T has a requirement that whenever it is used it is filled atleast 2,500 kgs. It is like a minimum allowable limit if using that BOX. Similarly, if we use a 12T the minimum Kgs that we need to ensure for a 12T is 4,200 Kgs. It can be more than these minimums for these box types but it should be atleast 2,500 kgs for 8T and atleast 4200 kgs for 12T. But for a 8T there is no minimum requirement at all. Similarly, 10T and 12T has a volume minimum of 21 and 36 Cubic meters respectively, while 8T does not have any.

Earlier we have got the model to work for BoxBased Cost and Vol Based Cost. The Weight Based cost is little different and so I am declaring a new decision variable called var Wt_inside_Box . I tried it, changed my "PerWeight_Based_Rate_NoZeroes" and also added the constraints for weight . Here is my code. The stuff that I have added are in GREEN. The one constraint that was working from earlier round is "Weight_Constraint_A". This is to make sure that the Capacity of the BOX is not exceeded. On the other hand the constraint "Weight_Constraint_B", I intend to have this enforce the minimum weight in a box is filled if the model picks that BOX type in the optimum answer. I tried different things but could not make it work. Here is my code. The dataset is still the same from my first message in this thread.

```
/* Decision Variable - START */
var BoxesNeeded {ISN,BOX}>=0 integer;
var Wt_inside_Box {ISN,BOX}>=0 integer; /*This need not be an integer but I can force my input to be an integer if need be*/
/* Decision Variable - END */
/*Define Rates and Implicit Variables - START
set <str,str,str> PerBox_Based_Rate_NoZeroes;
num PerBox_Based_Rate {PerBox_Based_Rate_NoZeroes};
read data CASUSER.BOXRATE
(where=(RateBasis="PerBox" and Ratetype='Linehaul' and Rate>0))
into PerBox_Based_Rate_NoZeroes=[ORG DES BOX] PerBox_Based_Rate=Rate;
impvar PerBox_Based_Costs = sum {i in ISN, b in BOX: <Org_ISN[i],Des_ISN[i],b> in PerBox_Based_Rate_NoZeroes}
PerBox_Based_Rate[Org_ISN[i],Des_ISN[i],b] * BoxesNeeded[i,b];
set <str,str,str> PerVol_Based_Rate_NoZeroes;
num PerVol_Based_Rate {PerVol_Based_Rate_NoZeroes};
read data CASUSER.BOXRATE
(where=(RateBasis="PerVolUOM" and Ratetype='Linehaul' and Rate>0))
into PerVol_Based_Rate_NoZeroes=[ORG DES BOX] PerVol_Based_Rate=Rate;
impvar PerVol_Based_Costs = sum {i in ISN, b in BOX: <Org_ISN[i],Des_ISN[i],b> in PerVol_Based_Rate_NoZeroes}
PerVol_Based_Rate[Org_ISN[i],Des_ISN[i],b] * BoxesNeeded[i,b]; */
set <str,str,str> PerWeight_Based_Rate_NoZeroes;
num PerWeight_Based_Rate {PerWeight_Based_Rate_NoZeroes};
read data CASUSER.BOXRATE
(where=(RateBasis="PerWtUOM" and Ratetype='Linehaul' and Rate>0))
into PerWeight_Based_Rate_NoZeroes=[ORG DES BOX] PerWeight_Based_Rate=Rate;
impvar PerWeight_Based_Costs = sum {i in ISN, b in BOX: <Org_ISN[i],Des_ISN[i],b> in PerWeight_Based_Rate_NoZeroes}
PerWeight_Based_Rate[Org_ISN[i],Des_ISN[i],b] * Wt_inside_Box[i,b];
/*Define Implicit Variables - END */
Min TotalCost =
/*PerBox_Based_Costs + PerVol_Based_Costs+*/
PerWeight_Based_Costs;
/* Constraints - START */
for {i in ISN, b in BOX: Is_BoxAvalable_for_a_lane[Org_ISN[i],Des_ISN[i],b] = 0}
fix BoxesNeeded[i,b] = 0;
/* con Volume_Constraint {i in ISN}:
sum {b in BOX} Volume_Capacity[Org_ISN[i],Des_ISN[i],b] * BoxesNeeded[i,b] >= Volume_ISN[i];
con Volume_Constraint_MinThreshold {i in ISN}:
sum {b in BOX} Volume_Min[Org_ISN[i],Des_ISN[i],b]*BoxesNeeded[i,b] <=Volume_ISN[i];
*/
con Weight_Constraint_A {i in ISN}:
sum {b in BOX} Weight_Capacity[Org_ISN[i],Des_ISN[i],b] * BoxesNeeded[i,b] >= Weight_ISN[i];
con Weight_Constraint_B {i in ISN, b in BOX: <Org_ISN[i],Des_ISN[i],b> in PerWeight_Based_Rate_NoZeroes}:
Wt_inside_Box[i,b]* BoxesNeeded[i,b] >= BoxesNeeded[i,b]*Weight_Min[Org_ISN[i],Des_ISN[i],b];
```

/* Constraints - END */
solve with milp / decomp=(method=concomp);
print BoxesNeeded;
print Wt_inside_Box;

- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content

OK, I think I understand what you want. You cannot separately assign volume and weight for the same item. I recommend introducing a new variable to represent the proportion of the item assigned to a box, along with implicit variables to represent the volume and weight:

```
var BoxesNeeded {ISN,BOX} >= 0 integer;
var Proportion {ISN,BOX} >= 0 <= 1;
impvar VolumeInsideBox {i in ISN, b in BOX} = Volume_ISN[i] * Proportion[i,b];
impvar WeightInsideBox {i in ISN, b in BOX} = Weight_ISN[i] * Proportion[i,b];
```

The implicit variables for costs are then as follows:

```
impvar PerVol_Based_Costs = sum {i in ISN, b in BOX: <Org_ISN[i],Des_ISN[i],b> in PerVol_Based_Rate_NoZeroes}
PerVol_Based_Rate[Org_ISN[i],Des_ISN[i],b] * VolumeInsideBox[i,b];
impvar PerWeight_Based_Costs = sum {i in ISN, b in BOX: <Org_ISN[i],Des_ISN[i],b> in PerWeight_Based_Rate_NoZeroes}
PerWeight_Based_Rate[Org_ISN[i],Des_ISN[i],b] * WeightInsideBox[i,b];
```

And the constraints are:

```
/* Constraints - START */
for {i in ISN, b in BOX: Is_BoxAvalable_for_a_lane[Org_ISN[i],Des_ISN[i],b] = 0}
fix BoxesNeeded[i,b] = 0;
con SumProportionToOne {i in ISN}:
sum {b in BOX} Proportion[i,b] = 1;
con Volume_Constraint {i in ISN, b in BOX}:
Volume_Capacity[Org_ISN[i],Des_ISN[i],b] * BoxesNeeded[i,b] >= VolumeInsideBox[i,b];
con Weight_Constraint {i in ISN, b in BOX}:
Weight_Capacity[Org_ISN[i],Des_ISN[i],b] * BoxesNeeded[i,b] >= WeightInsideBox[i,b];
con Volume_Constraint_MinThreshold {i in ISN, b in BOX}:
Volume_Min[Org_ISN[i],Des_ISN[i],b] * BoxesNeeded[i,b] <= VolumeInsideBox[i,b];
con Weight_Constraint_MinThreshold {i in ISN, b in BOX}:
Weight_Min[Org_ISN[i],Des_ISN[i],b] * BoxesNeeded[i,b] <= WeightInsideBox[i,b];
/* Constraints - END */
```

For your sample data, the resulting optimal solution has an objective value of 500,000 and uses 1x10T and 2x8T:

[1] | [2] | BoxesNeeded | Proportion | VolumeInsideBox | WeightInsideBox |
---|---|---|---|---|---|

SHA_LAX_2 | 10T | 1 | 0.66667 | 21.333 | 10000 |

SHA_LAX_2 | 12T | 0 | 0.00000 | 0.000 | 0 |

SHA_LAX_2 | 20F | 0 | 0.00000 | 0.000 | 0 |

SHA_LAX_2 | 40F | 0 | 0.00000 | 0.000 | 0 |

SHA_LAX_2 | 40H | 0 | 0.00000 | 0.000 | 0 |

SHA_LAX_2 | 45F | 0 | 0.00000 | 0.000 | 0 |

SHA_LAX_2 | 8T | 2 | 0.33333 | 10.667 | 5000 |

SHA_LAX_2 | LCL | 0 | 0.00000 | 0.000 | 0 |

SHA_LAX_2 | Level0 | 0 | 0.00000 | 0.000 | 0 |

SHA_LAX_2 | Level1 | 0 | 0.00000 | 0.000 | 0 |

SHA_LAX_2 | Level2 | 0 | 0.00000 | 0.000 | 0 |

Your proposed solution of 1x10T and 1x12T would have violated the minimum volume threshold of 36 (> 32) for 12T.

- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content

Hi Rob

I can't thank you enough for the suggestions. I ran the model and it worked. Am just doing spot checking a few shipments to see if it works. So far everything seems to good. I will doing more testing on monday. But I feel we have got it fully. Thanks a lot.

**Don't miss out on SAS Innovate - Register now for the FREE Livestream!**

Can't make it to Vegas? No problem! Watch our general sessions LIVE or on-demand starting April 17th. Hear from SAS execs, best-selling author Adam Grant, Hot Ones host Sean Evans, top tech journalist Kara Swisher, AI expert Cassie Kozyrkov, and the mind-blowing dance crew iLuminate! Plus, get access to over 20 breakout sessions.

Multiple Linear Regression in SAS

Learn how to run multiple linear regression models with and without interactions, presented by SAS user Alex Chaplin.

Find more tutorials on the SAS Users YouTube channel.