Git Product home page Git Product logo

localsearchsolvers.jl's Introduction

LocalSearchSolvers

Docs Docs Build Status codecov Code Style: Blue

Constraint-Based Local Search Framework

The LocalSearchSolvers.jl framework proposes sets of technical components of Constraint-Based Local Search (CBLS) solvers and combine them in various ways. Make your own CBLS solver!

A higher-level JuMP interface is available as CBLS.jl and is the recommended way to use this package. A set of examples is available within ConstraintModels.jl.

Dependencies

This package makes use of several dependencies from the JuliaConstraints GitHub org:

It also relies on great packages from the julialang ecosystem, among others,

  • ModernGraphs.jl (incoming): a dynamic multilayer framework for complex graphs which allows a fine exploration of entangled neighborhoods

Related packages

  • JuMP.jl: a rich interface for optimization solvers
  • CBLS.jl: the actual interface with JuMP for LocalSearchSolvers.jl
  • ConstraintModels.jl: a dataset of models for Constraint Programming
  • COPInstances.jl (incoming): a package to store, download, and generate combinatorial optimization instances

Features

Wanted features list:

  • Strategies
    • Move: local move, permutation between n variables
    • Neighbor: simple or multiplexed neighborhood, dimension/depth
    • Objective(s): single/multiple objectives, Pareto, etc.
    • Parallel: distributed and multi-threaded, HPC clusters
    • Perturbation: dynamic, restart, pool of solutions
    • Portfolio: portfolio of solvers, partition in sub-problems
    • Restart
      • restart sequence
      • partial/probabilistic restart (in coordination with perturbation strategies)
    • Selection of variables: roulette selection, multi-variables, meta-variables (cf subproblem)
    • Solution(s): management of pool, best versus diverse
    • Tabu
      • No Tabu
      • Weak-tabu
      • Keen-tabu
    • Termination: when, why, how, interactive, results storage (remote)
  • Featured strategies
    • Adaptive search
    • Extremal optimization
  • Others
    • Resolution of problems
      • SATisfaction
      • OPTimisation (single-objective)
      • OPTimisation (multiple-objective)
      • Dynamic problems
    • Domains
      • Discrete domains (any type of numbers)
      • Continuous domains
      • Arbitrary Objects such as physical ones
    • Domain Specific Languages (DSL)
      • Straight Julia :raw
      • JuMPish | MathOptInterface.jl
      • MiniZinc
      • OR-tools ?
    • Learning settings (To be incorporated in MetaStrategist.jl)
      • Compositional Networks (error functions, cost functions)
      • Reinforcement learning for above mentioned learning features
      • Automatic benchmarking and learning from all the possible parameter combination (instance, model, solver, size, restart, hardware, etc.)

Contributing

Contributions to this package are more than welcome and can be arbitrarily, and not exhaustively, split as follows:

  • All features mentioned above
  • Adding new constraints and symmetries
  • Adding new problems and instances
  • Adding new ICNs to learn error of existing constraints
  • Creating other compositional networks which target other kind of constraints
  • Just making stuff better, faster, user-friendlier, etc.

Contact

Do not hesitate to contact me (@azzaare) or other members of JuliaConstraints on GitHub (file an issue), the julialang Discourse forum, the julialang Slack workspace, the julialang Zulip server (Constraint Programming stream), or the Humans of Julia Humans-of-Julia discord server(julia-constraint channel).

localsearchsolvers.jl's People

Contributors

azzaare avatar chritkhalil avatar github-actions[bot] avatar jakewilliami avatar wikunia avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

localsearchsolvers.jl's Issues

TagBot trigger issue

This issue is used to trigger TagBot; feel free to unsubscribe.

If you haven't already, you should update your TagBot.yml to include issue comment triggers.
Please see this post on Discourse for instructions and more details.

If you'd like for me to do this for you, comment TagBot fix on this issue.
I'll open a PR within a few hours, please be patient!

Define a move in function of a dimension

The dimension of a move is the size of the (valid) neighborhood where a permutation of values can occur.
If dim == 0, the move will look at a change of value in the selected variable domain.

If the neighborhood is precomputed (with the chance to define the different possible sizes, for instance if only 1 is chosen, it would be a simple permutation solver), the dimension will be chosen at each "try" with probability inverse proportionally to the dimension.

Biased selection

Not only bad variables should be selected but occasionally some good variables too to avoid local extrema.

@richoux I mention you here as it is also related to renewal of GHOST strategy.

Dynamic solving

Requires:

  • Asynchronous solving
  • Pool of solution
  • Restart strategy
  • Dynamic re-computation (incrementally) of preprocesses (such as Neighborhood)

Continuous domain

  • Heuristic evaluation of values
  • Some methods in ConstraintDomains.jl

Arbitrary domains

Examples:

  • Physical object (in Garamon.jl)
  • sub problems as multidimensional variable
    • a LP/MILP/etc. compatible subproblem

Framework versatily

Chose method for the following part of the solving process

  • Local extrema avoidance
    • Weak-tabu search
    • Adaptive search
    • Restart strategies
    • extremal optimization
  • Variable selection
    • Full computation
    • Probabilistic selection
    • Bias selection (as in modern MCTS)
  • Move with neighborhood dimension
    • dim 0 and 1 (no preprocess required)
    • arbitrary dimension
  • Preprocesses
    • Neighborhood discovery and weighting
    • ICN

Issue should probably be split in individual points

Probabilistic variable selection

The candidate method is Roulette Selection. The goal is to reduce the computation time required to select a bad [enough] variable (instead of the worst).

Adaptive Search

This search method is relatively close in concept and implementation to weak-tabu list search (which a water-down version of AD ...).
Can be implemented quickly.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.