delorie.com/archives/browse.cgi   search  
Mail Archives: geda-user/2015/10/28/08:32:04

X-Authentication-Warning: delorie.com: mail set sender to geda-user-bounces using -f
X-Recipient: geda-user AT delorie DOT com
Message-ID: <1446034915.3188.31.camel@ssalewski.de>
Subject: [geda-user] Some update for Ruby toporouter
From: Stefan Salewski <mail AT ssalewski DOT de>
To: geda-user AT delorie DOT com
Date: Wed, 28 Oct 2015 13:21:55 +0100
In-Reply-To: <1444589890.676.20.camel@ssalewski.de>
References: <20151003210701 DOT de392b925f54dadb0a5fedd8 AT gmail DOT com>
<1443903758 DOT 1873 DOT 13 DOT camel AT ssalewski DOT de> <56104A0A DOT 9020507 AT xs4all DOT nl>
<1443909591 DOT 1873 DOT 18 DOT camel AT ssalewski DOT de>
<CAC4O8c_g7e562Gaotrbi6gLfjP6cJU1ys=MtEkDE7bSh4F9dfg AT mail DOT gmail DOT com>
<1443975731 DOT 671 DOT 52 DOT camel AT ssalewski DOT de>
<20151004191717 DOT bf8223417541a9306bfbd9ea AT gmail DOT com>
<CAC4O8c9Bi5HJfcW6wUgm_+4O2gs4vDdBMbS2hF_0dCqnBuJahQ AT mail DOT gmail DOT com>
<1443997480 DOT 2068 DOT 32 DOT camel AT ssalewski DOT de>
<CAC4O8c-bnGky=Nab59-pOTJkB8Q9Tc5t5hqE+dnEF-777hUjMg AT mail DOT gmail DOT com>
<1444070851 DOT 1014 DOT 20 DOT camel AT ssalewski DOT de> <muv4ua$hat$1 AT ger DOT gmane DOT org>
<1444157156 DOT 1949 DOT 52 DOT camel AT ssalewski DOT de> <mvckfg$teb$1 AT ger DOT gmane DOT org>
<1444567608 DOT 973 DOT 15 DOT camel AT ssalewski DOT de> <mvea9j$ar6$1 AT ger DOT gmane DOT org>
<1444589890 DOT 676 DOT 20 DOT camel AT ssalewski DOT de>
X-Mailer: Evolution 3.16.5
Mime-Version: 1.0
Reply-To: geda-user AT delorie DOT com
Errors-To: nobody AT delorie DOT com
X-Mailing-List: geda-user AT delorie DOT com
X-Unsubscribes-To: listserv AT delorie DOT com

On Sun, 2015-10-11 at 20:58 +0200, Stefan Salewski wrote:
> On Sun, 2015-10-11 at 20:37 +0200, Kai-Martin Knaak wrote:
> > Thank you. This link worked nicely.
> > 
> > I will try to get a grasp how the algorithm works. Don't expect me to
> > come up with ideas for improvement. All the simple routes have
> > probably
> > already been thoroughly explored.
> 
> There is much room for improvements, as I already said. One reason is,
> that Tal Dayan's thesis is less concerned with PCB and the space
> restrictions. For example when you read about layer assignment, it is
> clear that that algorithm is nice, but it assumes that only traces build
> barriers for other traces. But on PCB dense spaced pin rows can built
> barriers too. That is only one point, which I can currently remember and
> I have not tried to improve. Another point is, that I used a lot of
> hashes to mark blocked paths. I was not really happy with that, it
> works, but is a simple minded way. The thesis told us only about the
> region idea, but not how they really did it unfortunately. (But they
> have 14k lines of code as they told, we have only 2k.)

OK, since some people asked about it in the last weeks:
I have made a tar archive containing all the Ruby glue code for CGAL and
BOOST library, so you can play with it when you really want.

AND: I spent the whole last weekend fixing the ugly usage of hashes for
some blocked path. At the same time I was able to relax routing to allow
also outer convex paths. Both is not really an improvement for actual
routing -- hashes worked fine, but consumed much memory and it was
really not a smart solution. And convex outer path -- well generally the
inner path give better traces, maybe with very few exceptions. But I
always had the feeling that outer paths should be usable too, and now
that is done. We have to tune weighing of outer/inner path, without that
too many outer ones are used.

I had not the time to clean up the code yet :-(

If you want to play with it: You need Ruby interpreter, preferable
latest version 2.2, ruby-gnome2 for cairo picture drawing, and CGAL and
BOOST library. Maybe developer packages for some of that. And a Linux
box with a working C compiler.

Download Router20151028.tar from http://ssalewski.de/Router.html.en and
extract it in an arbitrary named directory. You get directories Router,
RAPOLLONIUS, RCGAL, RTREE_2D_POINT, RTREE_2D_RECT and RBOOST. Cd into
Router, and type "bash gen_bindings". That will generate .so files for
the CGAL and BOOST bindings. Now you can start testing with "ruby
router.rb". Result should be an test routing generated with random
numbers. Or type "ruby pcbtr.rb" to generate pics for that example pcb.
Of course that all is only playing -- next would be cleaning up the
code, then improving the layer assignment. For that we may route each
subpath in advance to detect barriers and get a lower bound for the
detour. After that we may tune the real routing process -- a very simple
way may be to reorder the routing sequence, moving failed traces further
to the start. And we should add some GUI support of course...

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019