FindInstance (and Solve, ...) abysmally slow on a fully determined system of linear equations and inequalities: why?
I took a quick look for FindInstance
and Solve
-related questions but came up empty for the aspect that I am curious about. So here is my newbie question:
FindInstance[{
s==9,r==8,d==7,n==6,e==5,y==2,m==1,o==0
},{s,e,n,d,m,o,r,y},Integers]
runs as quickly as one would expect. But
FindInstance[{
s!=e!=n!=d!=m!=o!=r!=y,
s==9,r==8,d==7,n==6,e==5,y==2,m==1,o==0
},{s,e,n,d,m,o,r,y},Integers]
takes ages -- long enough that I ran out of patience before MMA was done.
And now I am curious: Why would Mathematica suddenly display less maths ability than a third-grader?
bill_s suggested something much faster, but it is not equivalent to the original problem. The original inequality required all variable values to be different from all other variable values, such that each value can only be used for one variable. The FindInstance statement in Bill's post only compares x[i] to the ith value, but not to the other n-1 values.
In other news,
FindInstance[{
(*s!=e,s!=n,s!=d,s!=m,s!=o,s!=r,s!=y,*)
(*e!=n,e!=d,e!=m,e!=o,e!=r,e!=y,*)
n!=d,n!=m,n!=o,n!=r,n!=y,
d!=m,d!=o,d!=r,d!=y,
m!=o,m!=r,m!=y,
o!=r,o!=y,
r!=y,
s==9,r==8,d==7,n==6,e==5,y==2,m==1,o==0
},{s,e,n,d,m,o,r,y},Integers]
~1.1 seconds (on my laptop).
FindInstance[{
(*s!=e,s!=n,s!=d,s!=m,s!=o,s!=r,s!=y,*)
e!=n,e!=d,e!=m,e!=o,e!=r,e!=y,
n!=d,n!=m,n!=o,n!=r,n!=y,
d!=m,d!=o,d!=r,d!=y,
m!=o,m!=r,m!=y,
o!=r,o!=y,
r!=y,
s==9,r==8,d==7,n==6,e==5,y==2,m==1,o==0
},{s,e,n,d,m,o,r,y},Integers]
2nd comment uncommentd. ~20 s.
FindInstance[{
s!=e,s!=n,s!=d,s!=m,s!=o,s!=r,s!=y,
e!=n,e!=d,e!=m,e!=o,e!=r,e!=y,
n!=d,n!=m,n!=o,n!=r,n!=y,
d!=m,d!=o,d!=r,d!=y,
m!=o,m!=r,m!=y,
o!=r,o!=y,
r!=y,
s==9,r==8,d==7,n==6,e==5,y==2,m==1,o==0
},{s,e,n,d,m,o,r,y},Integers]
Both comments uncommented. ~1 minute.
The original version (multiple inequalities in one condition):
Timing[FindInstance[{
s!=e!=n!=d!=m!=o!=r!=y,
s==9,r==8,d==7,n==6,e==5,y==2,m==1,o==0},
{s,e,n,d,m,o,r,y},Integers]]
150 seconds!
Answer
No one has upgraded this post in a long time and as Danny promised all the problems the OP posted have been dealt with. In v 11.1 for instance, the last one now runs in a lot less than 150 seconds.
Timing[FindInstance[{
s!=e!=n!=d!=m!=o!=r!=y,
s==9,r==8,d==7,n==6,e==5,y==2,m==1,o==0},
{s,e,n,d,m,o,r,y},Integers]]
{0.01, {{s -> 9, e -> 5, n -> 6, d -> 7, m -> 1, o -> 0, r -> 8, y -> 2}}}
Comments
Post a Comment