Xpress 8.0 has been released

Document created by oliverbastert@fico.com on May 19, 2016Last modified by Makenna.Brei on Jul 12, 2017
Version 2Show Document
  • View in full screen mode

New in Release 8.0


  • The parallel MIP code has been completely rewritten to improve performance and scalability.
  • Mosel now represents all its internal strings in UTF-8 and supports character encoding conversions
  • The Xpress interfaces to Java require a minimum of Java 6 (internal version: 1.6.0)
  • The interfaces to Visual Basic have been changed as follows:
    • Visual Basic 6 ("VB6", "classic VB") is no longer supported
    • Viusal Basic for Applications ("VBA") is now only supported with the Mosel API
    • Visual Basic .NET ("VB.NET") support remains unaffected

Xpress-Optimizer 29.01.07

  • The parallel MIP code has been completely rewritten to improve performance and scalability. The MIP API and solver interaction through callbacks remains mostly unaffected.
    • The worker tasks have been decoupled from the number of running threads. The solution path followed by the MIP solver now depends only on the worker task limit and not on the number of running solver threads.
    • A new control, MAXMIPTASKS, has been introduced to manually limit the number of MIP worker tasks. The number of running threads is still given by MIPTHREADS (which is derived from THREADS on automatic setting). By setting MAXMIPTASKS to a fixed number, the MIP solver will always return the same deterministic solution independent of the number of cores on the host machine, assuming that the LP threading controls have also been set to a fixed number. To guarantee a deterministic outcome for any number of cores, the following controls should be set: MAXMIPTASKS to a positive value. BARTHREADS to a positive value FORCEPARALLELDUAL=1 CONCURRENTTHREADS to a positive value, or do not run concurrent.
    • A new control MIPTERMINATIONMETHOD determines how to complete worker tasks in case of an early termination (time limit, node limit, etc).
    • Heuristics can now be run in parallel with cutting in deterministic mode. Previously, heuristics would only be run in parallel after cutting.
  • It is now possible to create a basic solution from a not necessarily basic LP solution vector.
    • A new API function, XPRScrossoverlpsol, has been introduced to run the crossover algorithm on a user solution loaded through memory or from a file.
    • A new API function, XPRSloadlpsol, to load a solution vector from memory into the Optimizer. It will be set up as a solution without a basis, to the current LP problem in memory.
    • A new control, PREPROTECTDUAL, that can be used to specify whether the presolving of a problem with a loaded LP solution should avoid any reductions that could introduce dual infeasibilities.
  • Introduced code support for AVX2 in the Barrier solver.
    • Set CPUPLATFORM=3 to enable AVX2 code support (when supported by the host CPU).
  • Improved performance and numerical stability of crossover.
  • A new control, BARORDERTHREADS, has been introduced to set the number of concurrent threads for the sparse matrix ordering in the barrier algorithm.
  • New presolve reductions, strengthenings and reformulations for convex quadratic and conic problems.
    • A new control, PRECONEDECOMP, has been introduced to specify whether large cones should be decomposed when solving an MISOCP problem using an outer approximation method.
  • Improved implementation of zero-half cutting for MIPs.
  • The LP solution refiner can now run before postsolve to address any scaling infeasibilities. New bit option for XPRS_REFINEOPS has been added, and is enabled by default.
  • The LP solution refiner now allows target values larger then the the feasibility and optimality tolerance, to be used on the post-solved problem.
  • The effect of setting controls during the MIP search is now deterministic (if the MIP is solved in deterministic mode).
  • A new control, HEURSEARCHROOTCUTFREQ, which can be used to specify how frequently root local search heuristics should be run between rounds of cuts.
  • A new zero-objective local search heuristic to help find a first feasible solution for MIPs. Enabled by turning on bit 5 of the HEURSEARCHROOTSELECT and HEURSEARCHTREESELECT controls.
  • A new control, ADDMIPSOLHEURISTIC, to control the local search heuristic that will be applied to infeasible or partial solutions loaded with XPRSaddmipsol.
  • It is now possible to get rows and columns sorted as part of presolve. This could e.g. be used to ensure that a problem solves the same way regardless of the order in which variables and constraints have been declared.
    • A new control, PRESORT, has been introduced to specify whether to sort rows, columns or the global entity list.
    • New controls, PREPERMUTE and PREPERMUTESEED, have been introduce to allow rows, columns or the global entity list to be permuted randomly.
  • The control MPSFORMAT now defaults to free format with a value of 1.
  • The control CSTYLE no longer has any effect and will be removed from future releases.
  • The control HEURSEARCHROOTSELECT new defaults to 53 which enables two additional local search heuristics during the root node processing.
  • The Java interface requires a minimum of Java 6 (internal version: 1.6.0)
  • The Visual Basic interface is only supported via VB.NET

Xpress-Mosel 4.0.0

The specified item was not found. for details on upgrading Mosel models from 3.X to 4.0.

  • New functions _() and _c() for message translation
  • New procedures write_ and writeln_ for message translation
  • Annotations mc.msgdom and mc.msgid for message translation
  • New procedure 'setioerr' to raise an IO error from the Mosel code


  • New option '-l' to select the language
  • Debugger: new command 'lslocal' to display a list of local symbols


  • The standard protocol can now be disabled by setting the tcp port to -1 (in this case the server starts only if the ssh protocol is enabled)
  • New server parameter SSH_CIPHERS (and command line option '-sc') to select which ciphers are accepted for SSH sessions


  • The new 'xprnls' library implements various character encoding routines as well as message catalog management (for message translation)
  • The 'xprnls' command tool is a character encoding converter (i.e. it makes it possible to convert text files from an encoding to another) and a message catalog processor


  • Java: file manager routines now intercept all exceptions instead of only IOExceptions
  • New function 'XPRDinstid' (C) and 'XPRDMosel.getId' (Java) to retrieve the ID of an instance (=node number)


  • Java version: string handling functions accept now an additional parameter for selecting the character encoding (default: UTF-8)

Java interface

  • The Java interface requires a minimum of Java 6 (internal version: 1.6.0)
  • New method to retrieve local identifiers (XPRMModel.localIdentifiers)
  • When a PrintStream is used as a text output stream via the 'mmjava:' driver and no encoding is specified, data is sent as text strings to the 'print' method (this enables Java encoding conversion).

Visual Basic interface

  • The Visual Basic interface is no longer supported by VB6, only via VBA and VB.NET
  • VBA: some functions that take or return pointers have been changed to use Variant rather than Long (in 32-bit) or LongPtr (in 64-bit)
  • VBA: The XPRM_IO_CB function can now be used to create callback-based I/O handlers for any text output, not just as an argument to XPRMsetdefstream

Compiler Library

  • All routines working with strings now expect UTF-8 strings
  • Source file encoding may be specified using the '!@encoding' annotation to be put at the beginning of the file. For instance: !@encoding:ISO-8859-15
  • New compiler option '-x' to generate a POT file from a model (message translation)

Runtime Library

  • All routines working with strings now expect UTF-8 strings
  • New 'enc:' filename prefix to select encoding. By default text files are expected to be in UTF-8 and detect UTF-16 and UTF-32.
  • 'initialisations' data files can specify an encoding using the special comment '!@encoding' to be put at the beginning of the file. For instance: !@encoding:CP1252
  • New function 'XPRMdbg_getnextlocal' to enumerate local symbols during a debugging session
  • New function 'XPRMdbg_getlndx' to retrieve all lines indices at once
  • If restriction 'NoExec' is active, modules that are not located in read-only directories are now ignored
  • Mosel can now be installed under bin32/lib32/dso32 (32bit build) and bin64/lib64/dso64 (64bit build). This makes it possible to have both 32bit and 64bit distributions under the same directory tree

Native Interface (NI)

  • Deprecated IO routine 'IOCTRL_ERROR' no longer supported
  • IO driver routine 'IOCTRL_OPEN' now receives an additional parameter (encoding of the stream)

mmetc 1.8.5

  • Switch to xprnls for message translation

mmhttp 2.0.0

  • Consecutive requests to a given server are now processed using a single connection
  • New control parameters 'http_expire' and 'http_maxconn' to manage the pool of connections
  • Switch to UTF-8 encoding

mmjobs 2.10.0

  • Deleting the file "shmem:*" has the effect of deleting all memory files handled by 'shmem'
  • 'rmt:' driver: r/w error messages from the remote host are now displayed
  • New parameter 'defaultnode': this is the node number used by 'rmt:' when no node reference is given - switch to UTF-8 encoding

mmnl 1.6.1

  • Switch to xprnls for message translation

mmoci 1.6.0

  • Communication with the database in UTF-8
  • Option 'debug' now disabled if model is not compiled in debug mode

mmodbc 3.0.0

  • Support for ANSI (default on Posix) and UNICODE (default for Windows) ODBC interfaces
  • Interface can be selected with the 'enc:' filename prefix
  • Option 'debug' now disabled if model is not compiled in debug mode
  • New procedure SQLindices to retrieve the indices of a table
  • SQLite driver: support for ':memory:' and empty file name databases

mmquad 1.2.7

  • Switch to xprnls for message translation

mmrobust 1.2.1

  • Switch to xprnls for message translation

mmsheet 1.4.0

  • Switch to UTF-8 encoding
  • Driver 'csv': strings starting with '0' or spaces are no longer implicitly interpreted as numbers
  • Empty records are now skipped when reading a list of records

mmssl 1.2.0

  • Switch to UTF-8 encoding

mmsystem 2.0.0

  • All string operations now performed in UTF-8
  • New value -1 for 'qtype' (quoting mode) disables quoting
  • 'zip' and 'tar' routines can select the encoding used for file names (in the archive) using the 'enc:' prefix on the archive name
  • IMCI: new functions 'gettime'/'settime', 'getdate'/'setdate', 'getdatetime'/'setdatetime'

mmxml 2.2.0

  • XML documents are now encoded/decoded according to the specified encoding
  • JSON documents are now properly handled as UTF-8
  • Procedure 'getnodes' and 'getnode' no longer fail when applied to node 0 on an empty document
  • New function 'getsize(xmldoc)' to get the number of nodes of a document
  • Control parameter 'xml_keeputf' has been removed (no longer necessary)

mmxprs 2.10.0

  • Switch to UTF-8 encoding

zlib 1.4.0

  • Support for UTF-8 in file names

deploy 2.0.0

  • Switch to UTF-8 encoding
  • Support for program parameters containing non-ascii symbols

r 1.0.12

  • Added support for restricted R on FAC

Non-Linear 29.01.07

  • New default convergence mechanism for improved solution quality
    • new control XSLP_VALIDATIONTARGET_K to specify target first order optimality accuracy.
    • new control XSLP_VALIDATIONTARGET_R to specify target relative validation accuracy.
    • new values for XSLP_CONVERGENCEOPS to allow disabling / enabling the target convergence options.
    • new default value for XSLP_CONVERGENCEOPS to reflect the use of the target convergence checks.
    • the traditional SLP convergence controls now default to -1, their values are dynamically adjusted during the run. U ser set values are respected as normal and are not modified. The controls that now default to -1 are XSLP_CTOL, XSLP_ATOL_A, XSLP_ATOL_R, XSLP_MTOL_A, XSLP_MTOL_R, XSLP_ITOL_A, XSLP_ITOL_R, XSLP_STOL_A, XSLP_STOL_R, XSLP_MVTOL, XSLP_XTOL_A, XSLP_XTOL_R, XSLP_OTOL_A, XSLP_OTOL_R, XSLP_VTOL_A, XSLP_VTOL_R, XSLP_EVTOL_A, XSLP_EVTOL_R, XSLP_ECFTOL_A, XSLP_ECFTOL_R, XSLP_WTOL_A and XSLP_WTOL_R.
  • The mixed integer nonlinear solver MISLP has been reworked
    • much improved general performance.
    • the default MINLP solver now runs in parallel mode for the tree search.
    • greatly increased heuristics capability for the MINLP solver.
  • Probing algorithm based on the bound reduction algorithm to further tighten variable bounds; it works on several levels (which can be set automatically or by the user) for applying probing to different classes of variables.
  • The VB interface is no longer supported, except in VB.NET. User functions written in VB6 or VBA are still supported, provided that they do not need to call the XSLP API.
  • Upgraded Knitro to version 10.0.

BCL 4.8.8

  • Added C/C++/Java/.NET functions to iterate over constraints and constraint terms
  • Added/extended XPRBterm and XPRMqterm classes to Java and .Net to allow inspection of iterated constraint terms
  • Changed getIIS Java/.Net method to retrieve the first IIS by default instead of the IIS approximation
  • Added error code return to C++ functions that can fail on out of memory
  • The VB interface is no longer supported, except in VB.NET
  • The interface to Java requires a minimum of Java 6 (internal version: 1.6.0)

IVE 1.24.10

  • Supports Mosel UTF-8 encoding

XAD 1.2.10

  • Supports Mosel UTF-8 encoding

Fixed in Release 8.0

Xpress-Mosel 4.0.0

Runtime Library

  • A possible memory corruption in deletion of large finalised sets has been fixed


  • Debugger: 'getsize' now reports the expected value when applied to strings produced from external types

Compiler Library

  • Redeclaration of a constant scalar no longer leads to a corrupted bim file

mmodbc 3.0.0

  • 64bit platforms: a potential memory corruption has been fixed

mmsheet 1.4.0

  • Excel driver: a possible crash on Windows 8.1 64Bit and newer has been fixed
  • xls/xlsx/csv drivers: conversion from boolean to string now valid

mmsystem 2.0.0

  • Parsetext now updates 'endparse' when used with a parse context
  • mmsystem.text driver now fails when trying to write to an unitialised object

mmxprs 2.10.0

  • Optimiser status 'MIP_LP_NOT_OPTIMAL' now interpreted as 'unfinished'
  • 'defsecurevecs' no longer ignores set of rows if a set of variables is used
  • A potential memory corruption has been fixed in getloaded{mpvars|linctrs}
  • 'savemipsol' no longer reports an error when used on a presolved problem

BCL 4.8.8

  • Fixed issue with 'getIIS' when used to access the IIS approximation
  • Fixed 'printcut' to print using problem pointer
  • Fixed error message in 'printctr'/'printidxset'
  • Fixed extra cut printing in 'xbgetcuts'

IVE 1.24.10

  • Fixed Excel issue, where model deployed to VBA would occasionally have incorrect working directory

Known issues in Release 8.0


  • When using the 'moselexec' function from the Xpress Matlab Interface, in order to correctly exchange strings containing Unicode characters between Matlab and Mosel (which now uses UTF-8 for its internal representation of text strings), the Matlab 'DefaultCharacterSet' should be set to UTF-8 too. This can be achieved by executing the Matlab command "feature('DefaultCharacterSet','UTF-8')".