Skip to main content
Glama

Constrained Optimization MCP Server

production_planning.pyโ€ข7.08 kB
""" Production Planning Optimization Example This module demonstrates production planning optimization for a manufacturing facility. The problem involves determining optimal production quantities for different products to maximize profit while respecting resource constraints such as machine time, labor hours, and material availability. The linear programming problem maximizes total profit subject to: - Limited machine hours across production lines - Limited labor hours for assembly and quality control - Material inventory constraints - Non-negativity constraints on production quantities - Optional demand bounds for each product This is a classic linear programming problem suitable for HiGHS. """ from returns.result import Failure, Success from usolver_mcp.solvers.highs_solver import simple_highs_solver def create_production_problem(): """ Create a production planning optimization problem. Returns: dict: Problem parameters for the HiGHS solver """ # Products: [ProductA, ProductB, ProductC] # Profit per unit for each product profit_per_unit = [25.0, 40.0, 35.0] # Resource constraints matrix # Rows: [Machine Hours, Labor Hours, Material Units] # Columns: [ProductA, ProductB, ProductC] resource_matrix = [ [2.0, 3.0, 2.5], # Machine hours per unit [1.0, 2.0, 1.5], # Labor hours per unit [3.0, 1.0, 2.0], # Material units per unit ] # Available resources available_resources = [ 100.0, # Machine hours available 80.0, # Labor hours available 120.0, # Material units available ] # Variable definitions (all continuous, non-negative) variables = [ {"name": "ProductA", "lb": 0, "type": "cont"}, {"name": "ProductB", "lb": 0, "type": "cont"}, {"name": "ProductC", "lb": 0, "type": "cont"}, ] # Constraint senses (all less than or equal to available resources) constraint_senses = ["<=", "<=", "<="] return { "sense": "maximize", "objective_coeffs": profit_per_unit, "variables": variables, "constraint_matrix": resource_matrix, "constraint_senses": constraint_senses, "rhs_values": available_resources, "description": "Production planning optimization to maximize profit", } def solve_production_planning(): """ Solve the production planning problem and return results. Returns: dict: Solution results including optimal production quantities and profit """ problem_params = create_production_problem() result = simple_highs_solver(**problem_params) # Parse the result from the HiGHS solver match result: case Success(solution): if solution.status.value == "optimal": # Extract solution values production_quantities = solution.solution or [] # Ensure we have 3 values for the 3 products if len(production_quantities) >= 3: return { "status": "optimal", "production_quantities": production_quantities[:3], "total_profit": solution.objective_value or 0, } else: return {"status": "error", "error": "Incomplete solution"} else: return { "status": solution.status.value, "error": f"Problem status: {solution.status.value}", } case Failure(error): return {"status": "error", "error": str(error)} case _: return {"status": "error", "error": "Unexpected result type"} def analyze_solution(results, problem_params): """Analyze the solution and calculate resource utilization.""" if results["status"] != "optimal": return None production = results["production_quantities"] resource_matrix = problem_params["constraint_matrix"] available_resources = problem_params["rhs_values"] # Calculate resource usage resource_usage = [] for i in range(len(resource_matrix)): usage = sum( resource_matrix[i][j] * production[j] for j in range(len(production)) ) resource_usage.append(usage) # Calculate utilization percentages utilization = [ usage / available for usage, available in zip(resource_usage, available_resources, strict=False) ] return { "resource_usage": resource_usage, "resource_utilization": utilization, "available_resources": available_resources, } def print_results(results, problem_params) -> None: """Print production planning results in a formatted way.""" if results["status"] != "optimal": print(f"Problem Status: {results['status']}") if "error" in results: print(f"Error: {results['error']}") return products = ["Product A", "Product B", "Product C"] production = results["production_quantities"] print("Production Planning Optimization Results") print("=" * 55) print("\nOptimal Production Quantities:") for i, product in enumerate(products): print(f"{product}: {production[i]:8.2f} units") print(f"\nMaximum Total Profit: ${results['total_profit']:,.2f}") # Resource utilization analysis analysis = analyze_solution(results, problem_params) if analysis: resource_names = ["Machine Hours", "Labor Hours", "Material Units"] print("\nResource Utilization:") for i, name in enumerate(resource_names): usage = analysis["resource_usage"][i] available = analysis["available_resources"][i] utilization = analysis["resource_utilization"][i] print(f"{name:14}: {usage:6.2f} / {available:6.2f} ({utilization:6.1%})") def main() -> None: """Main function to run the production planning example.""" print(__doc__) problem_params = create_production_problem() results = solve_production_planning() print_results(results, problem_params) def test_production_planning() -> None: """Test function for pytest.""" problem_params = create_production_problem() results = solve_production_planning() # Test that we get an optimal solution assert results["status"] == "optimal" # Test that production quantities are non-negative production = results["production_quantities"] assert all(q >= 0 for q in production) # Test that resource constraints are satisfied resource_matrix = problem_params["constraint_matrix"] available_resources = problem_params["rhs_values"] for i in range(len(resource_matrix)): used = sum( resource_matrix[i][j] * production[j] for j in range(len(production)) ) assert used <= available_resources[i] + 1e-6 # Allow small numerical errors # Test that total profit is positive (assuming feasible problem) assert results["total_profit"] >= 0 if __name__ == "__main__": main()

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Sharmarajnish/MCP-Constrained-Optimization'

If you have feedback or need assistance with the MCP directory API, please join our Discord server