# Change History¶

- 4 Jul. 16:
Picos1.1.2Released

- Major release with following changes:

- Improved efficiency for the processing of large expressions.
- It is now possible to dynamically add and remove constraints, e.g. for column generation approaches, cf. this paragraph for an example. For an easier use, the function
`add_constraint()`

now returns a handle to the constraint when the option`return_constraints=True`

has been passed to the problem. Then, constraints can be deleted by using`constraint.delete()`

.- In previous versions, PICOS detected constraints that could be interpreted as a bound on a variable. This was creating a mess to delete constraints, so the default behaviour is now to pass all constraints as such. To stick to the old behaviour, use the option
`pass_simple_cons_as_bound=True`

.- New signature for the function
`partial_transpose()`

, which can now transpose arbitrary subsystems from a kronecker product.- Corrections of minor bugs with complex expressions.
- Better support for the SDPA solver.

- 29 Aug. 15:
Picos1.1.1Released

- Minor release with following changes:

- Partial trace of an Affine Expression, cf.
`partial_trace()`

- Bugfix for compatibility with python3 (thanks to Sergio Callegari)
- Initial support for the SDPA solver (with the option
`solver='sdpa'`

, picos works as a wrapper around the SDPA executable based on the`write_to_file()`

function; thanks to Petter Wittek )- Better PEP8-compliance

- 15 Apr. 15:
Picos1.1.0Released

- PICOS is now compatible with
python 3+(and remains compatible with python 2.6+). Many thanks to Sergio Callegari for this compatibility layer ! If you plan to work with PICOS and python3, think to install the most recent version of your solver (Mosek, Cplex, Gurobi, or Cvxopt). SCIP is not supported in python3+ at this point (but remains supported with python 2.x).- PICOS is now available on github.

30 Jan. 15:

Picos1.0.2Released

- Major release with following new functionalities:

- Support (read and write) for
`.cbf`

problem files (conic benchmark format ), which should be the standard for (mixed integer) conic optimization problems, cf.`write_to_file`

and`import_cbf`

.- Improved support for complex SDP (more efficient implementation of
`to_real()`

, corrected bug in the implementation of the scalar product for Hermitian matrices and the conjugate of a complex expression, support for equality constraints involving complex coefficients)- Support for inequalities involving the sum of k largest elements of an affine expression, or the k largest eigenvalues of a symmetric matrix expression, cf. the functions
`sum_k_largest()`

,`sum_k_smallest()`

,`sum_k_largest_lambda()`

,`sum_k_smallest_lambda()`

,`lambda_max()`

and`lambda_min()`

.- Support for inequalities involving the norm of an affine expresison, cf.
`norm()`

.- New
`vtype`

for antisymmetric matrix variables (`vtype`

`= antisym`

).- Constraints can be specified as membership in a
`Set`

. Sets can be created by the functions`ball()`

,`simplex()`

, and`truncated_simplex()`

.- New functions
`maximize`

and`maximize`

to specify the objective function of a problem and solve it.- And many thanks to Petter Wittek for the following improvements, who were motivated by the use of PICOS in the package ncpol2sdpa for optimization over noncommutative polynomials:

- More efficient implementation of the writer to the sparse - SDPA file format (
`write_to_file`

)- Hadamard (elementwise) product of affine expression is implemented, as an overload of the
`^`

operator, cf. an example here .- Partial transposition of an Affine Expression, cf.
`partial_transpose()`

or the`Tx`

attribute.

27 Aug. 14:

Picos1.0.1Released

- Release fixing the missing functionalities of the previous
.devversion:

- Improved support for complex SDP (access to dual information and correction of a few bugs, in particular sum of complex affine expression now work correctly)
- Flow constraints in graphs, including multicommodity flows, cf. this section.
- Additional
`coef`

argument in the function`picos.tracepow()`

, in order to represent constraints of the form .- Improved implementation of
`_retrieve_matrix()`

, which was taking a very long time to process large parameters.- Improved implementation of the retrieval of optimal primal variables with CPLEX. With the previous versions there was an important overhead at the end of the solving process to get the optimal values, this is now working much faster.
- Nicer documentation.

18 May 14:

**Picos**1.0.1.dev**Released**- Major Release with following changes:
- Support for Semidefinite Programming over the complex domain, see here.
- Flow constraints in graphs, cf. this section.
- Improved implementation of
`__getitem__`

for affine expressions. The slicing of affine expressions was slowing down (a lot!) the processing of the optimization problem.

19 Jul. 13:

Picos1.0.0Released

- Major Release with following changes:

- Semidefinite Programming Interface for MOSEK 7.0 !!!
- New options
`handleBarVars`

and`handleConeVars`

to customize how SOCP and SDPs are passed to MOSEK (When these options are set to`True`

, PICOS tries to minimize the number of variables of the MOSEK instance, see the doc in`set_all_options_to_default()`

).- The function
`dualize()`

returns the Lagrangian dual of a Problem.- The option
`solve_via_dual`

(documented in`set_all_options_to_default()`

) allows the user to pass the dual of a problem to a solver, instead of the primal problem itself. This can yield important speed-up for certain problems.- In addition to the geometric mean function
`picos.geomean()`

, it is now possible to pass rational powers of affine expressions (through an overload of the`**`

operator), trace of matrix powers with`picos.tracepow()`

, (generalized) p-norms with`picos.norm()`

, and nth root of a determinant with`picos.detrootn()`

. These functions automatically reformulate the entered inequalities as a set of equivalent SOCP or SDP constraints.- It is now possible to specify variable bounds directly (rather than adding constraints of the type
`x >= 0`

). This can be done with the Keywords`lower`

and`upper`

of the function`add_variable()`

, or by the methods`set_lower()`

,`set_upper()`

,`set_sparse_lower()`

, and`set_sparse_upper()`

of the class`Variable`

.- It is now more efficient to update a Problem and resolve it. This is done thanks to the attribute
`passed`

of the classes`Constraint`

and`Variable`

, that stores which solvers are already aware of a constraint / variable. There is also an attribute`obj_passed`

of the class`Problem`

, that lists the solver instances where the objective function has already been passed. The option`onlyChangeObjective`

has been deprecated.17 Apr. 13:

Picos0.1.3Released

- Major changes:

- Function
`picos.geomean()`

implemented, to handle inequalities involving a geometric mean and reformulate them automatically as a set of SOCP constraints.- Some options were added for the function
`solve()`

, to tell CPLEX to stop the computation as soon as a given value for the upper bound (or lower bound) is reached (see the options`uboundlimit`

and`lboundlimit`

documented in`set_all_options_to_default()`

).- The time used by the solver is now stored in the dictionary returned by
`solve()`

.- The option
`boundMonitor`

of the function`solve()`

gives access to the values of the lower and upper bounds over time with cplex. (this option is documented in`set_all_options_to_default()`

).- The weak inequalities operators
`<=`

and`>=`

can now be used (but strict inequalities are still interpreted as weak inequalities !).- Minor bugs corrected (access to the duals of fixed variables with CPLEX, evaluation of constant affine expressions with a zero coefficient appearing in the dict of linear terms, number of constraints is now updated in
`remove_constraint()`

).10 Jan. 13:

Picos0.1.2Released

- Bug-fix release, correcting:

- The
`write_to_file()`

function for sparse SDPA files. The function was writing the coefficients of the lower triangular part of the constraint matrices instead of the upper triangle.- An
`IndexError`

occuring with the function`remove_constraint()`

.Thanks to Warren Schudy for pointing out these bugs of the previous release !

08 Dec. 12:

Picos0.1.1Released

- Major changes:

- Picos now interfaces GUROBI !
- You can specify an initial solution to
warm-startmixed integer optimizers. (see the option`hotstart`

documented in`set_all_options_to_default()`

)- Minor bugs with quadratic expressions corrected
- It’s possible to return a reference to a constraint added with add_constraint()