Nathan: I don't know core.logic's capabilities, and I haven't looked at the kinds of constraints you describe in enough detail to say for sure, but my initial reaction is that linear/integer programming might be a better fit.
It has been about 5-10 years, but in the past I've had success with relatively small to medium scale problems using an open source package called lp_solve for such things. I haven't tried it with more than a few hundred variables and constraints to see how well it performs there. http://sourceforge.net/projects/lpsolve/ Besides SourceForge, it is also available as a MacPorts package called lp_solve, or an Ubuntu 12.04 package "lp-solve" (probably Debian and other Ubuntu versions, too, but I only checked that one). Andy On Oct 24, 2012, at 2:17 PM, nathanmarz wrote: > Cool, thanks for the quick response. We'll be looking into this pretty > soon. I ultimately want the logic engine itself being exposed to users > so they can add their own company-specific constraints to resource > scheduling – which will be totally badass. If you're interested in > tracking this, I opened up an issue on Storm: > https://github.com/nathanmarz/storm/issues/383 > > On Oct 24, 2:07 pm, David Nolen <dnolen.li...@gmail.com> wrote: >> On Wed, Oct 24, 2012 at 4:56 PM, nathanmarz <nathan.m...@gmail.com> wrote: >>> I'm looking into rewriting Storm's resource scheduler using >>> core.logic. I want to be able to say constraints like: >> >>> 1. Topology A's slots should be <= 10 and as close to 10 as possible >>> (minimize the delta between assigned slots and 10) >> >> The minimization bit is not in core.logic yet. But basically anything in >> Mozart/OZ's Finite Domain Constraint Programming feature set is on the >> table for core.logic :) >> >>> 2. All topologies should use less than 200 CPU's and less than 600 GB >>> of memory >>> 3. Topology B should run at most 2 workers on each host >>> 4. Each worker for topology C should run at most one task for >>> component X and one task for component Y >>> 5. Should minimize the amount of reassignment to running topologies in >>> order to satisfy constraints >>> 6. Should only be allowed to reassign workers for an individual >>> topology whose individual constraints are satisfied once every 10 >>> minutes >> >> Yep definitely sounds like the kind of thing I'd like core.logic to be used >> for. >> >>> And so on. I have two questions: >> >>> 1. How good is core.logic at culling the search space using arithmetic >>> logic? For example, if it knows that x + y <= 5, x>=0, and y>=0, it >>> should never bother with areas of the search space where x or y are >>>> =5. >> >> While there's always room to improve it already does this well. >> >>> 2. Can core.logic do things like search the space for which my >>> evaulation criteria are minimized? Or is what we're trying to do a >>> better fit for different techniques like linear programming? >> >> It can, but I need to sit down and figure out how to make that work. If I >> recall the Mozart/OZ work is pretty clear about their approach and I think >> it can easily be adapted. I'll try to find some time and get back to you on >> that. >> >> David > > -- > You received this message because you are subscribed to the Google > Groups "Clojure" group. > To post to this group, send email to clojure@googlegroups.com > Note that posts from new members are moderated - please be patient with your > first post. > To unsubscribe from this group, send email to > clojure+unsubscr...@googlegroups.com > For more options, visit this group at > http://groups.google.com/group/clojure?hl=en -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en