Excel to choose all possible combinations - excel

I've been trying to create this spreadsheet for days, but I'm just not sure on how to approach the final part of it, so I'm hoping someone on here will be able to help me.
To give you some context I'm trying optimize how many pallets of certain products we can fit onto a truck. Some pallets weigh more than others and some are much more common than others. We always put 24 pallets on, but if we were to combine with other less common products that weight less we could fit on 25 (or possibly even 26).
I need to create a spreadsheet where the user enters an amount of a certain item (product A which is the most common) and it gives all the possible combinations of the other products that could go with it that keeps it under a certain weight.
So for example. The user says they need to send out 17 of product A. It would then give you all the combinations that could fit with those 17 that keeps it below weight and at 25 (or 26) in total.
If it helps here at the actual weights below:
Product A = 1.138
Product B = 1.009776
Product C = 1.089
Product D = 1.092
Product E = 0.86556
Maximum weight is 28.
Is anyone help to help me achieve this?
I've found this document but this excel sheet doesn't aim to add up to 25 (or 26) which I want. I also don't need it to add up to 28, just be less than 28.

I've faced the same problem in a similar situation, I needed to optimize the way the logistics load the trucks. I haven't applied any of this yet, but I found this Spreadsheet for the knapsak problem. Between all values you pass to the sheet, the VBA get as many as possible values that fits the limit you also pass.
This spreadsheet is limited to 5 weights, but you might be capable to make it receive N weights.

Related

Excel - How to split values of 70 items equally into 6 groups

So I'm trying to create an Excel sheet to split the values of 70 items into six groups.
For reference, this is to divide my grandma's estate evenly for her six children. I have approx. 70 items and their appraised values in an Excel sheet, but not sure the best way to go about this. I was hoping to use Solver, but haven't been able to figure it out.
Ideally I could make it so people could pick specific items that they want and run the Excel sheet again to re-balance all the values.
Thanks!
So set this up, based on a thrown together set of values.
Each sumproduct is held to be <= to the (total value / 6)-10. You may want to reduce this to 5 or 2 etc but the smaller you go the harder it is to solve due to the values of the items.
I have done this for 30 items, there is a limit to the number of variables in the Solver - if you hit that then you might consider pairing items, or manually setting some will help, see below.
You might want to add something for sentimental value - I will leave you to consider that.
As for manually setting some items then you can set those items to one, move them to the top or bottom and remove them from the Solver variable cells - that way they won't get changed, but they still need to be included for the value. If the values are similar then they can be taken out if the differences are ignored by the parties.
So, edited the model, see below. Note that 1 item is not allocated. This could be addressed by changing the constraint controlling cells J9:J38 but it comes down to the difficulty of finding an exact solution and that is also why the 10 can be adjusted...

Using Sumproduct to calculate two tables using horizontal (table headers) and vertical references

Hopefully the title makes some sense because I'm trying to wrap my head around the logic and I'm not quite sure how to phrase the question.I'll try to give a brief explanation of the end goal without over complicating it with unnecessary details.
I have a table of survey score averages for every month per person and a correlating table with the number of surveys each person received for each month. The logic is essentially multiple the score for each month by the number of surveys, combine them, divide by the total number of surveys within that time period to get their true average. Where things get a little complicated is that I have to include the ability to set a custom date range and return the value. So sometimes I might be looking at the average for Jan - Apr, other times I might just be looking at Feb-Mar etc.
I think sumproduct is going to get what I need done but I'm running into issues trying to write it out. I've written it several different ways and none of them worked so here's one that best conveys what I'm trying to do,
=SUMPRODUCT(--(F7:I7,L7:O7>=C2),--(F7:I7,L7:O7<=C3),--(E8:E12,K8:K12=B9),tbl_average[[Jan-20]:[Apr-20]],tbl_surveys[[Jan-20]:[Apr-20]])
I super appreciate any assistance I can get on this. I'm hoping the end result is not nearly as difficult as I'm making it out to be.
Some additional information:
I'm going to be using this same process to calculate multiple metrics across multiple worksheets.In the test example each of the tables will most likely be on different sheets. The dashboard with the calculated results will contain everyone's names and will be filtered and rearranged frequently, so I need to make sure we're always matching directly to their names and not just the relative rows. Basically, in my example I show that Agent 1 is always lined up on row 8 but that's not always going to be the case. Agent 1 could be in Row 8 on Sheet 1, Row 10 on Sheet 2, and Row 12 on Sheet 3 and I need all the correct values to multiply and sum against one another.

How do I distribute a value over multiple cells evenly but under a maximum limit?

Example data with desired outcome that I need to calculate
I have 12 items of a certain current value. I have a 'soft' cap of $1,000,000 for these values. Some of the items fall above, and some below this cap level.
I have an amount of money (for this example $900,000) that I want to distribute amongst only the items that fall below the cap (in this example 6 items), with the aim of bringing the value of these items up to but not over the cap value.
If I distribute the $900,000 evenly over these 6 items (each receiving $150,000), you can see that items 2 and 9 would then be over the $1,000,000 cap. So items 2 and 9 should only receive $100,000 to raise their value to the cap, then the remaining 4 items would receive and equal share on the remaining pool of money ($700,000 / 4 = $175,000).
So I need a formula to check every item to see if it needs a distribution (i.e below the cap) and then portion/divide out the money pool as illustrated above in the desired distribution column.
Note: The pool of money to be distributed can change. Also the number of items below the cap can change. The cap value itself can change.
I am hoping to avoid VBA or Solver because the spreadsheet could be used on other people's computers.
Hopefully this makes sense. Thanks.
EDIT:
So far I have been able to get close by adding a helper column and using the following formula:
=IF(SUM($F$6:F14)=$D$23,0,E15*MIN(D15,($D$23-SUM($F$6:F14))/SUM(E15:$E$18)))
Working example when values are sorted.
This seems to work when the values are sorted in descending order, as shown in the example image above. But seems to break when the values are a bit more randomly assorted which is likely to happen (as in the original post).
Just to give you an idea of how the solver can be set up to do a capital budget model here is one, also shows the solver and its settings:

Calculating the best combination of coaches for passengers?

I have a table in Microsoft Excel that I'd like to use to calculate the best combination of coaches to house the supplied number of passengers. Here is a simplified version of the table:
I need to enter three formulas in the coach count column that calculates the best value-for-money combination of coaches that can carry all the passengers. For example, if there was 40 passengers, the result should be one 49-seat coach as opposed two 20-seat coaches as it's the cheapest combination.
I have no idea how I would work on implementing these formulas and would appreciate some pointers.
So far, all I have in C4 is
=IF(MOD(B1, A4) = 0, B1 / A4, 0) which only works with multiples of 20 and does not account for combinations of coaches or cost efficiency.
Perhaps this is too complex of a task to implement in formulae? Would I be better off using a VB macro, or simply leaving it to the user to calculate the best combination?
There are two ways to address this problem. I will outline both solutions:
Option 1: In Worksheet Formulas
I'd have to spend more time on this in order to find a really elegant solution for this route, but here's a functional approach that should work well enough. Here are some quick highlights:
Firstly, you need to add a column to your table that outlines the minimum number of seats a coach carries. This helps to facilitate the vlookup.
Secondly, make sure that your lookup table is sorted in ascending order according to the minimum # of seats.
I have made the assumption that the most effective pricing model is to get the majority of people onto the largest coach (or many of the largest coach), and then to use the smallest coach that would accommodate the remaining people. If this is not a fair assumption, then this solution may not be appropriate.
Here are screenshots of the final outcome:
And the formulas required to make it: (and a link in case you need to blow it up: http://i.stack.imgur.com/hKjQK.jpg)
Note: You'll notice that the previous answer is incorrect, as it suggested that 74 people would need to spend $180 instead of $140.
Option 2: Using Excel's Solver Add-In
Enable the solver add-in (File --> Options --> Add-ins --> Excel Add-ins (Manage) --> Solver Add-In)
Configure worksheet as shown:
UI:
The formulas:
On the Ribbon, go to the Data Tab, Analysis Group, & Click Solver.
Configure Solver as follows:
Click "Solve" and then click "Ok"
Final Outcome:
This seems to be a classic linear programming problem. You need to minimize total cost = (number of coach 1 times 50) + (number of coach 2 times 60) + (number of coach 3 times 80), subject to the constraint that (number of coach 1 times 20) + (number of coach 2 times 29) + (number of coach 3 times 49) is greater than or equal to (number of attendees), and all numbers of coaches are greater than or equal to zero. I think Excel's Solver is the tool for such a problem. You don't need to implement any of the solution yourself, you just set it up and Solver handles the algorithmic stuff.
Try this:
Sample calculation
With Formulas showing
The idea is to check for the largest coach first, using the integer value of division Count/Seats. The do the same for the 2nd largest coach with the remaining people. Etc etc.

How can I implement 'balanced' error spreading functionality in Excel?

I have a requirement in Excel to spread small; i.e. pennies, monetry rounding errors fairly across the members of my club.
The error arises when I deduct money from members; e.g. £30 divided between 21 members is £1.428571... requiring £1.43 to be deducted from each member, totalling £30.03, in order to hit the £30 target.
The approach that I want to take, continuing the above example, is to deduct £1.42 from each member, totalling £29.82, and then deduct the remaining £0.18 using an error spreading technique to randomly take an extra penny from 18 of the 21 members.
This immediately made me think of Reservoir Sampling, and I used the information here: Random selection,
to construct the test Excel spreadsheet here: https://www.dropbox.com/s/snbkldt6e8qkcco/ErrorSpreading.xls, on Dropbox, for you guys to play with...
The problem I have is that each row of this spreadsheet calculates the error distribution indepentently of every other row, and this causes some members to contribute more than their fair share of extra pennies.
What I am looking for is a modification to the Resevoir Sampling technique, or another balanced / 2 dimensional error spreading methodology that I'm not aware of, that will minimise the overall error between members across many 'error spreading' rows.
I think this is one of those challenging problems that has a huge number of other uses, so I'm hoping you geniuses have some good ideas!
Thanks for any insight you can share :)
Will
I found a solution. Not very elegant, through.
You have to use two matrix. In the first you get completely random number, chosen with =RANDOM() and in the second you choose the n greater value
Say that in F30 you have the first
=RANDOM()
cell.
(I have experimented with your sheet.)
Just copy a column of n (in your sheet 8) in column A)
In cell F52 you put:
=IF(RANK(F30,$F30:$Z30)<=$A52, 1, 0)
Until now, if you drag left and down the formulas, you have the same situation that is in your sheet (only less elegant und efficient).
But starting from the second row of random number you could compensate for the penny esbursed.
In cell F31 you put:
=RANDOM()-SUM(F$52:F52)*0.5
(pay attention to the $, each random number should have a correction basated on penny already spent.)
If the $ are ok you should be OK dragging formulas left and down. You could also parametrize the 0.5 and experiment with other values. With 0,5 I have a error factor (the equivalent of your cell AB24) between 1 and 2

Resources