Building on the concept and implementation of PAVER 2.0, the main goal of this project is to allow end users to interact with their own uploaded benchmark data from mathematical optimization problems and their solvers. The data is presented in a tabular format, with the added ability to visualize specific results through various plots, making it easier to understand and interpret the data. Demo-data is attained from miplib2010 examples. The .solu
file data from the problem libraries MINLPLib, MIPLIB 2017 and MIPLIB 2010 can be accessed directly through a dropdown option in the navigation menu.
This project is developed using TypeScript, DataTables.js, Chart.js and Webpack. Bootstrap is used for styling. Notably, the application can be run without a live server since Webpack is responsible for bundling the files. It is also possible to install it as a Progressive Web Application by launching the project in a live server, navigating to the report page using a compatible browser, and installing it. Support for offline functionality is incldued in the PWA implementation.
report.html
file in a web browser. .trc
format..solu
(best known primal and dual bounds for each instance) and .csv
(instance properties) can be uploaded in conjugation to get additional information.UserConfiguration.json
(Which can be created from this application).UserConfiguration.json
).View Table - View the table of the uploaded results.
Show Slected Rows - View rows that have been selected from the table.
Clear Data Table - Clear current table.
Show Selected Rows - Filters the table and only shows selected problems.
Clear Data Table - Clears the currently visible table.
Settings
Advanced Search - Create custom search queries.
Toggle Filters - Show filters for each column.
Export - Export the table as a CSV, copy table content to clipboard, or view it in the browsers print option.
The following header structure and order should be used in conjunction with .trc files, if no header is provided in the result files:
InputFileName
ModelType
SolverName
NLP
MIP
JulianDate
Direction
NumberOfEquations
NumberOfVariables
NumberOfDiscreteVariables
NumberOfNonZeros
NumberOfNonlinearNonZeros
OptionFile
ModelStatus
TermStatus
ObjectiveValue
ObjectiveValueEstimate
SolverTime
NumberOfIterations
NumberOfDomainViolations
NumberOfNodes
UserComment
For further information, see https://gams.com/latest/docs/UG_SolverUsage.html#UG_SolverUsage_TraceFile.
The file should include dataSet
and dataFileType
, defaultTime
and gapLimit
are optional.
{
"dataSet": [
"alan,MINLP,knitro,CONOPT,CPLEX,43365.479,min,8,9,4,24,3,1,8,Error,2.925,2.925,0.142,0,0,18,#,2.925,2.925,2.925,2.925,0,0,0,0,0",
"ball_mk2_10,MINLP,knitro,CONOPT,CPLEX,43365.479,min,2,11,10,21,10,1,8,Error,0,2.22044604925031E-16,2.5,0,0,3070,#,0,2.22044604925031e-16,0,2.22044604925031e-16,0,0,0,0,0",
"ball_mk2_30,MINLP,knitro,CONOPT,CPLEX,43365.479,min,2,31,30,61,30,1,2,Error,0,-26.887733399442,900.034,0,0,42269,#,0,-26.887733399442,0,-26.887733399442,Infinity,Infinity,0,0,0",
"ball_mk3_10,MINLP,knitro,CONOPT,CPLEX,43365.489,min,2,11,10,21,10,1,13,Error,0,NA,NA,NA,NA,NA,#,0,-Infinity,0,-Infinity,Infinity,Infinity,0,NaN,NaN",
"ball_mk4_05,MINLP,knitro,CONOPT,CPLEX,43365.51,min,2,11,10,21,10,1,13,Error,0,NA,NA,NA,NA,NA,#,0,-Infinity,0,-Infinity,Infinity,Infinity,0,NaN,NaN",
],
"dataFileType": "trc",
"defaultTime": 900,
"gapLimit": 0.1
}
As for now, this structure has to be used for the dataSet. It will eventually updated to a proper object.
Before getting started, make sure you have the following software installed on your machine:
Node.js: https://nodejs.org/
TypeScript: https://www.typescriptlang.org/
Webpack: https://webpack.js.org/
Install the required packages by running:
npm install
Navigate to the project directory in your terminal and run:
npm run build
This runs the command "webpack --config webpack.config.js", which will build the application using webpack'. The created bundle.js
and main.css
are located in Dist/
.
Dev server can be run with:
npnm run start
Run unit tests using Jest:
npm run test:functions
Run UI tests with Playwright using Jest:
npm run test:ui
Lint the project files using ESLint:
npm run lint
To automatically fix linting issues:
npm run lint:fix
Generate documentation using TypeDoc:
npm run build:docs
Create a slimmed down release build using gulp:
npm run release
Create a slimmed down web release build using gulp:
npm run release:web
Generated using TypeDoc