This repository demonstrates how to evolve a basic gurobipy optimization model into a fully-featured, cloud-native application using Nextmv. We'll take you through two stages of development, showing how minimal changes unlock powerful capabilities like observability, collaboration, instance management, version control, and experimentation.
A standard gurobipy diet optimization model that runs locally:
cd starting-state/
python main.pyWhat you get:
- ✅ Working optimization model
- ✅ Local execution
- ❌ No version control
- ❌ No collaboration features
- ❌ No observability
- ❌ No experimentation
Changes made:
- Added
app.yamlmanifest - Tells Nextmv how to run your model - Added statistics output - For experiment tracking and comparison
- Exposed options in
app.yaml- For model configuration
cd final-state/
tar czf - diet.dat | nextmv app run -a gurobipy-example -o "limit_dairy=true"
nextmv app output -a gurobipy-example -r <insert runID here>What you unlock:
- ✅ Observability: Detailed execution logs and metrics
- ✅ Collaboration: Share apps with team members
- ✅ Instance Management: Deploy and manage app versions
- ✅ Version Control: Track model changes over time
- ✅ Cloud Execution: Run on Nextmv's optimized infrastructure
- ✅ Configuration Testing: Compare different solver configurations
- ✅ Parameter Sweeps: Test multiple scenarios automatically
- ✅ Performance Analytics: Track solution quality and runtime
- ✅ Business Metrics: Custom statistics for your domain
This is a classic optimization problem that minimizes the cost of a diet while meeting nutritional requirements:
- Objective: Minimize total cost of food
- Constraints:
- Meet minimum nutritional requirements (calories, protein, vitamins, etc.)
- Stay within maximum volume limit
- Optional: Limit dairy products (experimentation feature)
type: python
runtime: ghcr.io/nextmv-io/runtime/python:3.11
python:
pip-requirements: requirements.txt
files:
- main.py
configuration:
content:
format: "multi-file"
multi-file:
input:
path: "inputs"
output:
solutions: "."
statistics: "statistics.json"
assets: "assets.json"This tells Nextmv:
- Use the Python runtime
- Include your Python files
- How to handle input/output data
- Statistics Output (
main.py):
import nextmv
statistics = nextmv.Statistics(
result=nextmv.ResultStatistics(
duration=m.Runtime,
value=m.ObjVal,
custom={
"nvars": m.NumVars,
"ncons": m.NumConstrs,
},
),
)- Configurable Options (
app.yaml):
configuration:
options:
items:
- name: limit_dairy
option_type: bool
default: false
ui:
control_type: togglepip install -r requirements.txt
python main.py
python app.py -action pushWith just a few simple changes (adding app.yaml and integrating Nextmv SDK), you transform a local script into a cloud-native optimization application with:
- Zero infrastructure management
- Built-in experiment tracking
- Team collaboration features
- Automatic scaling
- Version control and rollback
- Performance monitoring
This is the power of "Nextmvifying" your optimization models - minimal changes, maximum impact.