Initializing help system before first use

Collecting all solutions with the MIP solution pool


Type: Trim Loss
Rating: 3
Description: We take a trimloss problem in which each integer variable x(p) represents the number of rolls cut to pattern p. We define a new integer variable y=SUM(p)x(p) and add the associated constraint x(1)+x(2)+...+x(N)-y = 0 We do this by first adding a row containing the (unitary) coefficients of the x(p), and then a column corresponding to y. We output the revised matrix to a file and then solve the revised MIP, giving y the highest branching priority. Finally, we output the solution, both to the screen and to an ASCII solution file.
File(s): Trimloss.java
Data file(s): pplan.mat

Trimloss.java
/**********************************************************************************\
* Name:        Trimloss.c                                   Fair Isaac 14/03/2014  *
* Purpose:     Modify a problem by adding an extra variable within an additional   *
*              constraint.                                                         *
* Description: We take a trimloss problem in which each integer variable x(p)      *
*              represents the number of rolls cut to pattern p.                    *
*              We define a new integer variable y=SUM(p)x(p) and add the associated*
*              constraint                                                          *
*                                   x(1)+x(2)+...+x(N)-y = 0                       *
*              We do this by first adding a row containing the (unitary)           *
*              coefficients of the x(p), and then a column corresponding to y.     *
*              We output the revised matrix to a file and then solve the revised   *
*              MIP, giving y the highest branching priority. Finally, we output    *
*              the solution, both to the screen and to an ASCII solution file.     *
* Input:       trimloss.mat      original matrix file                              *
* Output:      trimloss.log      log file                                          *
*              Trimloss.sol      binary solution file - produced by default        *
*              Revised.mps       revised matrix file                               *
*              Revised.asc       ASCII solution file                               *
*              Revised.hdr       header for the ASCII solution file                *
\**********************************************************************************/

import java.io.*;
import java.text.DecimalFormat;

import com.dashoptimization.*;



public class Trimloss {
	/**
	 * Execute example from command-line
	 **/
	public static void main(String[] args) {
		Trimloss trimloss = null;
		XPRS.init();
		try {
			System.out.println(XPRS.getBanner());
			trimloss = new Trimloss();
			trimloss.run();
		} finally {
			if (trimloss!=null) trimloss.destroy();
			XPRS.free();
		}
	}
	
	
	/**
	 * XPRSprob for the trimloss problem
	 **/
	private XPRSprob probg;
	
	/**
	 * The index of the newly-added now
	 **/
	private int addedRowIndex;
	
	/**
	 * The index of the newly-added column
	 **/
	private int addedColIndex;
	

	/**
	 * Initialize Trimloss problem
	 **/
	public Trimloss() {
		probg = new XPRSprob();
	}
	
	/**
	 * Destroy the Trimloss problem
	 **/
	public void destroy() {
		probg.destroy();
	}
	
	/**
	 * Execute Trimloss example
	 **/
	public void run() {
		/* Setup the logfile */
		File logfile = new File("trimloss.log");
		if (logfile.exists()) logfile.delete();
		probg.setLogFile(logfile.toString());
		
		/* Print Xpress version number */
		DecimalFormat versionNumberFormatter = new DecimalFormat("0.00");
		System.out.println("Xpress Optimizer Subroutine Library Release "+versionNumberFormatter.format( (double)probg.controls().getVersion()/100 ));

		/* Load initial problem */
		loadInitialProblem();
		
		/* Add new row */
		addNewRow();
		
		/* Add new column */
		addNewColumn();
		
		/* Output the revised matrix */
		probg.writeProb("revised");
		
		/* Solve the MIP */
		solveProblem();
		
		/* Display solution */
		printSolution();
		
		/* Write solution to an ASCII file */
		probg.writeSol("revised");
		
	}


	/**
	 * Loads the initial trimloss matrix into the Xpress-Optimizer problem
	 **/
	private void loadInitialProblem() {
		probg.readProb("../data/trimloss");
	}
	
	/**
	 * Adds a new row to the matrix
	 **/
	private void addNewRow() {
		int nCol = probg.attributes().getCols(); /* nCol = number of columns in the matrix */
		int nNewRows = 1; /* Adding 1 new row */
		double[] dRHS = {0.0};
		int[] nRowStart = {0};
		byte[] sRowType = {'E'};
		/* Store the coefficients of x(p); */
		int nRowElem = nCol; /* New row has a coefficient in every column */
		double[] pRowVal = new double[nRowElem];
		int[] pColInd = new int[nRowElem];
		for (int i=0;i