Challenge Overview
Challenge Overview
Welcome to the Plan Optimizer Microservice API Implementation Challenge
Our goal is to design the backend API for the plan optimizer and provide an easy to use workflow for managing data sets.
Background
We have a CLI tool called Plan Optimizer that is used for optimizing well trajectory based on various inputs. We can input well parameters and optimization constraints from the input file into CLI tool and has two modes of operation:
-
Calculation - calculate all the possible combinations(These can run into several possible combinations) for well trajectory based on the user choices
-
Optimization - Out of the several, find the optimal well plan(Based on the criteria)
Finally, the tool writes all the results to the output file
This project has a few goals:
-
Improve the performance of the tool by improving the Code- improve the runtime speed for optimization
-
Expose the optimization tool as a microservice
Currently,Optimization mode supports several different optimization criterias:
-
Torque and drag minimization
-
Time and cost minimization
-
Collision avoidance (ie anticollision)
-
Minimum well plan depth value
Optimization tool is developed in C++ with a custom simulated annealing implementation.
Task Details
Focus of this challenge is on implementing the api for Plan Optimizer microservice.
Service will support both operation modes of the cli tool (optimization and calculation). CLI tool takes two sets of inputs:
-
Xml file that describes a well (exact format name is EDM)
-
Optimization options
EDM files can be relatively large, in the range of 100KB-50MB, so the microservice will support uploading the edm dataset and then using it multiple times for optimization with different options.
API specification is provided in the forums. Use NodeJS/Express and Postgres as database.
Authentication/authorization is not in scope. Create a docker file for the service and docker-compose config to start both the api and database. Unit tests are out of scope.
Submit the full codebase of the service and Readme file with configuration/deploymentinstructions and a postman collection for verifying the endpoints.