diff --git a/optimizeLP.ts.md b/optimizeLP.ts.md new file mode 100644 index 0000000..6c7fcfc --- /dev/null +++ b/optimizeLP.ts.md @@ -0,0 +1,99 @@ +# Documentation for `optimizeLP.ts` + +## Overview + +The `optimizeLP.ts` file is a **Node.js API handler** designed to solve **Linear Programming (LP) problems** using the `glpk.js` library. This API endpoint is set up to accept HTTP POST requests containing LP problem definitions and returns the optimization results. + +--- + +## Index + +1. [Setup and Imports](#-setup-and-imports) +2. [Function: `handler`](#-function-handler) + - [Request Method Handling](#-request-method-handling) + - [LP Problem Definition](#-lp-problem-definition) + - [GLPK Solver Integration](#-glpk-solver-integration) + - [Response Handling](#-response-handling) + - [Error Handling](#-error-handling) + + +--- + +## Setup and Imports + +```typescript +import { NextApiRequest, NextApiResponse } from 'next'; +import GLPK from 'glpk.js'; +``` + +- **Next.js API Types**: The file imports `NextApiRequest` and `NextApiResponse` from the Next.js framework to handle HTTP requests and responses. +- **GLPK.js**: The GLPK (GNU Linear Programming Kit) library is imported to enable the solving of LP problems in JavaScript. + +--- + +## Function: `handler` + +The main function, `handler`, is an asynchronous function that processes incoming HTTP POST requests to solve LP problems. + +### Request Method Handling + +```typescript +if (req.method === 'POST') { + // Handle POST requests +} else { + res.status(405).json({ message: 'Only POST method is allowed' }); +} +``` + +- **POST Method**: The handler only processes POST requests. Any other method results in a `405 Method Not Allowed` response. + +### LP Problem Definition + +```typescript +const { objective, constraints } = req.body; +``` + +- **Request Body**: The body of the POST request is expected to contain two main parts: + - **Objective**: Defines the direction (maximize or minimize) and the variables involved in the objective function. + - **Constraints**: An array of constraints with bounds and variables. + +### GLPK Solver Integration + +```typescript +const glpk = await GLPK(); +const options = { msglev: glpk.GLP_MSG_ALL, presol: true, cb: { call: (progress: any) => console.log(progress), each: 1 } }; +const problem = { /* problem definition */ }; +const result = glpk.solve(problem, options); +``` + +- **GLPK Initialization**: The GLPK library is initialized asynchronously. +- **Solver Options**: Options for the GLPK solver are defined, including message level and presolve options. +- **Problem Structure**: The LP problem is structured with objectives and constraints, ready for GLPK to process. +- **Solve**: The `glpk.solve` function is called with the problem and options, returning the result of the optimization. + +### Response Handling + +```typescript +res.status(200).json({ result, lpFormat }); +``` + +- **Successful Response**: If the optimization is successful, the result and a formatted LP problem definition are sent back as the response. + +### Error Handling + +```typescript +catch (error: unknown) { + if (error instanceof Error) { + console.error('Error processing optimization:', error); + res.status(500).json({ message: 'Error processing optimization', error: error.message }); + } else { + console.error('Unknown error:', error); + res.status(500).json({ message: 'Error processing optimization', error: 'Unknown error' }); + } +} +``` + +- **Error Logging and Response**: If an error occurs during processing, it is logged, and a `500 Internal Server Error` response is returned, including the error message for debugging. + +--- +