Conversion Graph

graph LR flopt([flopt.Problem]) style flopt fill:#fff,stroke:#000,stroke-width:1px QpStructure[QpStructure] LpStructure[LpStructure] IsingStructure[IsingStructure] QuboStructure[QuboStructure] flopt --> QpStructure QpStructure --> flopt flopt --> IsingStructure IsingStructure --> flopt QpStructure --> LpStructure LpStructure --> QpStructure IsingStructure --> QuboStructure QuboStructure --> flopt

This is the Conversion Graph of flopt. Vertexes represent optimization problem structures, and tail problem of a edge can be convertable to head one. There exists paths connected any vertex pairs, so these optimization problem structures are convertabled to each other.

For example, when we convert Lp to Qubo, flopt executes LpStructure.toQubo(), and the conversion chain is as follows, internally.

graph LR flopt([flopt.Problem]) style flopt fill:#fff,stroke:#000,stroke-width:1px QpStructure[QpStructure] LpStructure[LpStructure] IsingStructure[IsingStructure] QuboStructure[QuboStructure] LpStructure --> QpStructure --> flopt --> IsingStructure --> QuboStructure

Some solvers input a structure, and the Conversion Graph includes solvers and modelers is as follows.

graph LR flopt([flopt.Problem]) style flopt fill:#fff,stroke:#000,stroke-width:1px CVXOPT(CVXOPT) style CVXOPT fill:#fff,stroke:#000,stroke-width:1px Scipy.optimize.milp(Scipy.optimize.milp) style Scipy.optimize.milp fill:#fff,stroke:#000,stroke-width:1px Scipy.optimize.minimize(Scipy.optimize.minize) style Scipy.optimize.minimize fill:#fff,stroke:#000,stroke-width:1px PuLP([PuLP]) style PuLP fill:#fff,stroke:#000,stroke-width:1px Hyperopt(Hyperopt) style Hyperopt fill:#fff,stroke:#000,stroke-width:1px Optuna(Optuna) style Optuna fill:#fff,stroke:#000,stroke-width:1px Amplify(Amplify) style Amplify fill:#fff,stroke:#000,stroke-width:1px SolversInFlopt(Solvers in flopt) style SolversInFlopt fill:#fff,stroke:#000,stroke-width:1px QpStructure[QpStructure] LpStructure[LpStructure] IsingStructure[IsingStructure] QuboStructure[QuboStructure] flopt --> QpStructure QpStructure --> flopt flopt --> IsingStructure IsingStructure --> flopt QpStructure --> LpStructure LpStructure --> QpStructure IsingStructure --> Amplify IsingStructure --> QuboStructure QuboStructure --> flopt QpStructure --> CVXOPT LpStructure --> Scipy.optimize.milp LpStructure --> PuLP PuLP --> flopt flopt --> Hyperopt flopt --> Optuna flopt --> Scipy.optimize.minimize flopt --> SolversInFlopt