Challenge Overview
Challenge Overview
Welcome to the Plan Optimizer Microservice API Design Challenge
Our goal is to design the appropriate 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 designing 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 should support uploading the edm dataset and then using it multiple times for optimization with different options.
Optimization options should be passed as in json format, and the results should also be returned as json. It is up to you to determine the exact inputs and results format - you will need to determine that from the CLI tool (optimization options are defined in PlanOpt.h)
Authentication/authorization is not in scope.
Submit a swagger specification for the microservice and an ER diagram for database that will store the edm data (assume we will be using PosgreSQL).