Key Information

Register
Submit
The challenge is finished.

Challenge Overview

Challenge Overview

Welcome to the Plan Optimizer Performance Analysis Challenge

Analyze the provided optimizer tool and suggest areas for improving the performance.

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:

  1. Improve the performance of the tool by improving the Code- improve the runtime speed for optimization

  2. Expose the optimization tool as a microservice

Currently,Optimization mode supports several different optimization criterias:

  1. Torque and drag minimization

  2. Time and cost minimization

  3. Collision avoidance (ie anticollision)

  4. Minimum well plan depth value

 

Optimization tool is developed in C++ with a custom simulated annealing implementation.

Task Details

Your task is to analyze the provided codebase(within CLI) and propose areas for improving the performance of both calculation and optimization modes. 

 

Note that the requirement for this challenge is NOT to implement any performance optimizations, but only to propose the areas where the tool can be improved along with rough estimates for the expected performance gains. Ideas that we are looking for are:

  • Can the objective function be implemented to be more performant

  • What results can be achieved by parallelizing the execution

  • Can we use any specific optimization libraries

  • Effects of vectorized code

  • Does it make sense to introduce some caching for objective function calculation

  • Is there a more suitable algorithm than simulated annealing (only for the optimization mode)

These are just some starting ideas and you are free to expand the list. Each of the areas that you suggest are good candidates for improvement will also require documenting how feasible it is to implement it (ex if you suggest that some code should be vectorized, you should also document exactly which parts of the code would be affected - is it just the optimization function, the input values, etc), what are the expected performance gains (your best estimate) - think of it as an architecture document that will be used by the developers in future challenges to implement those changes.

Note that it is not mandatory that we keep the optimizer implementation in c++ - long term goal is to extract it into a microservice, so switching the implementation to another language would not be an issue, but on the other hand simply switching the implementation to another language without significant performance benefits is not a good idea.

 

NOTE: We are not looking to change the calculations of the physical processes modeled by the objective function

 

Your submission should be a document with following sections:

  • General info - your analysis of the plan optimizer codebase

  • Details for the areas worth improving (with implementation details for each area as mentioned above)

  • List of areas that are not worth exploring and why - different approaches you investigated but don’t think will yield much benefits.

  • Summary and a recommendation for the architecture of the updated well plan optimizer tool.


 

Final Submission Guidelines

See above

ELIGIBLE EVENTS:

2021 Topcoder(R) Open

REVIEW STYLE:

Final Review:

Community Review Board

Approval:

User Sign-Off

SHARE:

ID: 30157323