This archive is distributed in association with the INFORMS Journal on Computing under the MIT License.
The software and data in this repository are a snapshot of the software and data from the development repository that were used in the research reported on in the paper JANOS: An Integrated Predictive and Prescriptive Modeling Framework.
Important: This code is being developed on an on-going basis at https://github.com/iveyhuang/2020.1023.git. Please go there if you would like to get a more recent version or would like support.
To cite this software, please cite the paper using its DOI 10.1287/ijoc.2020.1023
and the software, using its DOI:
Below is the BibTex for citing this version of the code.
@article{JANOS,
author = {D. Bergman and T. Huang and P. Brooks and A. Lodi and A.U. Raghunathan},
publisher = {INFORMS Journal on Computing},
title = {{JANOS} Version v2020.1023},
year = {2020},
doi = {10.5281/zenodo.4017796},
url = {https://github.com/INFORMSJoC/2020.1023},
}
JANOS is an integrated predictive and prescriptive modeling framework. It seamlessly integrates the two streams of analytics, for the first time allowing researchers and practitioners to embed machine learning models in an optimization framework.
JANOS allows specifying a prescriptive model using standard optimization modeling elements such as constraints and variables. The key novelty lies in providing modeling constructs that allow for the specification of commonly used predictive models and their features as constraints and variables in the optimization model. JANOS considers two sets of decision variables: regular and predicted. The relationship between the regular and predicted variables are specified as pre-trained predictive models.
JANOS works in python3
and can be downloaded and installed via pip
using the following command:
pip install janos
If you need to upgrade the package at a future date, please install and upgrade using the following command:
pip install janos --upgrade
To execute a .py
file and replicate our experimental results in the paper, direct to the folder where the .py
file is located (in scripts
) in the command line, type python rewrite_08_20200430_s1.py
and press enter, here taking rewrite_08_20200430_s1.py
as an example.
college_student_enroll-s1-1.csv
contains the 20,000 randomly generated student records for training predictive models.
college_applications6000.csv
contains 6,000 student application records. We randomly draw certain number of records from this pool for our experiments in the paper.
rewrite_08_20200430_s1.py
is for comparing JANOS_Discrete, JANOS_CONTINUOUS, and a greedy heuristic when using logistic regression models and neural networks respectively.
evaluate_linearize_logistic_20200430.py
is for evaluating the accuracy of the linearization component for logistic regression models.
evaluate_linear_regression_20200430.py
is for evaluating the performance of JANOS at solving various-sized problems when using linear regression models.
evaluate_logistic_regression_20200430.py
is for evaluating the performance of JANOS at solving various-sized problems when using logistic regression models.
evaluate_neural_network_20200430.py
is for evaluating the performance of JANOS at solving various-sized problems when using neural networks.
data_all_scale_20200501_summary.csv
contains the formatted results for generating Figure 3 (The average runtimes of three predictive models with different scales) in the most recent version.
20200501_logistic_regression_approximation_evaluation_13-56-12-20200502.txt
contains the formatted results for generating Figure 4 (The quality of the linear approximation of the logistic regression function at optimal solutions) in the most recent version.
rewrite_08_s1_full_15/09/27-20200501.xlsx
contains the formatted results for generating Table 1 in the most recent version.
Please find more information on JANOS's website.
For support in using this software, please submit an issue or email David Bergman and Teng Huang.