A few improvements:
Fix a bug with limited trivial link bandwidth. It used to be the case that we penalized solutions that over-used the trivial bandwidth based on the number of links that were over it. Turns out this was a problem, if you had links of differing bandwidths, and were near the limit. Certain orderings were possible where you would remove two trivial links in a different order than you added them, which might result in more (or fewer) violations being scored then when you did them originally. The fix for this is to penalize these based on bandwidth, which is what assign now does. Added a '-g' flag, which does greedy link selection - assign normally does random link selection until the very end, when it does one pass with greedy selection. This flag makes it do this all the time. This is useful for debugging, because it cuts out a call to random(). Turns out, it doesn't seem to make assign much slower. I might consider making it the default. Better output when the selftest (-T) fails.