Ask Your Question

CptnChristo's profile - activity

2015-05-30 20:40:07 +0200 commented answer Enumerating solutions to a system of linear relations

Thank you for the response! The algorithm being "slow" is to be expected. It's the nature of the problem. Though, I'm wrestling with how to convert the example into a set of polyhedron vertices. I assume each vertex coordinate represents one of the desired quantities (e.g. pennies, nickels, dimes). But the relations involve different quantities (i.e. "number of coins" versus "monetary value"). So I'm not sure how to map those quantities into a single n-dimensional polyhedron. I don't mean to impose, but could you offer a small example?

And, I wish one solution was enough. Unfortunately for me, this represents a sub-calculation within a larger probability question. I need all solutions to guarantee probability accuracy.

Again, thank you for your help.

2015-05-30 08:34:09 +0200 received badge  Editor (source)
2015-05-30 07:22:18 +0200 asked a question Enumerating solutions to a system of linear relations

Hi, I'm new to sagemath, and I've been away from math courses for a while now. Please be patient with me! :)

I want to feed sagemath a system of linear relations. I'd like sagemath to give back all positive integer solutions to the system. I'll use a classic math exercise to illustrate.

You have pennies, nickels, and dimes. Find all combinations of coins that sum to at least 10 cents, but no more than 15 cents. Select between 5 and 7 coins (inclusive). Only nickels and dimes contribute to the wanted sum. Assume you have more than 7 of each type of coin.

In the relations below, 'pennies', 'nickels', and 'dimes' represent the number of coins from the respective denomination. So, the relations are:

pennies + nickels + dimes >= 5
pennies + nickels + dimes <= 7
5*nickels + 10*dimes >= 10
5*nickels + 10*dimes <= 15

I'd like sagemath to process the above system into a list of solutions similar to:

[
  { pennies: 4, nickels: 0, dimes: 1 },
  { pennies: 5, nickels: 0, dimes: 1 },
  { pennies: 6, nickels: 0, dimes: 1 },
  { pennies: 3, nickels: 1, dimes: 1 },
  ...
  { pennies: 4, nickels: 3, dimes: 0 }
]

This is what I've tried:

sage: pennies,nickels,dimes = var('pennies,nickels,dimes')
sage: coins_max = (pennies+nickels+dimes<=7)
sage: coins_min = (pennies+nickels+dimes>=5)
sage: value_max = (5*nickels+10*dimes<=15)
sage: value_min = (5*nickels+10*dimes>=10)
sage: assume( pennies>=0, pennies<=7, nickels>=0, nickels<=7, dimes>=0, dimes<=7 )
sage: coin_solve = solve( [coins_max, coins_min, value_max, value_min], pennies, nickels, dimes, solution_dict=True )
sage: print coin_solve
[
  {-2*pennies + 8: nickels, dimes: -1/2*nickels + 1, nickels: -2*pennies + 12},
  {-2*pennies + 7: nickels, dimes: -1/2*nickels + 3/2, nickels: -2*pennies + 11},
  {-2*pennies + 7: nickels, dimes: -nickels - pennies + 5, nickels: -2*pennies + 8},
  {-2*pennies + 11: nickels, dimes: -nickels - pennies + 7, nickels: -2*pennies + 12},
  {-2*pennies + 7: nickels, max(-1/2*nickels + 1, -nickels - pennies + 5): dimes, dimes: min(-1/2*nickels + 3/2, -nickels - pennies + 7), nickels: -2*pennies + 12},
  {pennies: dimes + 3, nickels: -2*dimes + 2},
  {pennies: dimes + 5, nickels: -2*dimes + 2},
  {pennies: dimes + 2, nickels: -2*dimes + 3},
  {pennies: dimes + 4, nickels: -2*dimes + 3}
]

I don't know if solve() is the right approach. Do I need another function to further process solve()'s results? Do I need to write my own?

I'm hoping someone can point me in the right direction. Thank you for your time.