Practice and summary of systematic learning of basic algorithms of operations research

introduction

It’s already December in the blink of an eye, and 2023 is about to come to an end.

My girlfriend keeps saying recently that time seems to fly so fast after work. In fact, I think so too. The older you get, the more you worry about the 35-year-old crisis. Therefore, people should continue to learn and improve. Specifically, outside of working hours, I can grow a little bit about myself every year.

At the beginning of 2023, I set a series of goals for my own growth, one of which was systematization. The systematization here mainly includes two items. The first is the systematization of basic operations research algorithms, and the second is the systematization of machine learning algorithms. At the end of the year, it’s time to make a summary of the year’s work.

This article will focus on sharing the practice and summary of the first item this year (Basic Algorithm of Operations Research), and subsequent articles will talk about another content.

See text below.

target design

For a scientific and systematic approach, I personally think that we should refer to the catalogs of various professional books, and then combine our own cognition to make personalized designs. For example, the book "Operations Research" (Tsinghua University Press) starts directly from linear programming problems, but the simplex method for solving linear programming problems is already a problem for me. It's quite complicated and can't be considered an introduction.

The picture below shows the systematic learning goals I set for myself at the beginning of this year.

I believe that the learning process should go from simple to complex. The simplest operations research problem should be a one-dimensional unconstrained problem. On this basis, the problem dimension can be increased and different types of constraints can be added. These contents were classified as nonlinear planning modules in my systematic learning goals at the beginning of the year. Now that I think about it, the title of the "Nonlinear Programming" module is not very accurate, but I didn't think of anything better, so I'll just keep using this one.

After understanding the above basic algorithm system with good universality, I think it is suitable to study linear/integer programming, a type of problem that has been widely studied in actual business, and the corresponding solution algorithms.

In addition to nonlinear programming, linear programming and integer programming, the main reason for learning intelligent optimization algorithms is that I feel that in the attempts to improve these algorithms, the design of the iteration direction and iteration step size is very artistic, although it lacks strict Mathematically proven, but has proven to be a very effective means in practice.

goal practice

For most algorithms, I set a preset goal for myself to complete the study in two weeks, so that in the final evaluation, I would have 19 weeks remaining.

In terms of the remaining time, the plan I have arranged for myself is relatively loose. I have always felt that work and study should serve life. If there is a conflict, a happy life experience should come first. So I didn’t want to put too much pressure on myself from the beginning. If I felt a little tired, lazily playing games, watching videos, or even just being bored, I wouldn’t feel too guilty.

This is actually the case - from the perspective of completion, my last article was VNS, which was completed on November 12th. There were only 6 weeks left before December 31st, which means that I wasted about 13 weeks in the middle of the year. time.

My definition of completing algorithm learning is to write an article corresponding to the algorithm content, which should contain at least 2 modules:

The first one is to use your own logic to clearly describe the principle of the algorithm. My requirement for myself is to make the content understandable to anyone new to algorithms. If I really have the opportunity to teach and educate people in the future, this should be my precious wealth;

The second is to write your own code to implement the entire algorithm process. My requirement for myself is to program in Python and Java respectively to verify whether I really understand the principles of the algorithm and at the same time improve my coding ability.

From the actual completion point of view, every algorithm-related article is considered to be passing. I am quite satisfied with the description of the algorithm principle, especially when I receive heart-warming comments and messages from friends, I am very encouraged. In terms of code implementation, it did not meet expectations. In the beginning, some simple algorithms could be implemented in Python and Java respectively. In the middle and later stages, when the algorithm complexity increased, it became somewhat beyond its capabilities. After recognizing the reality, I removed the goal of using Java to implement the algorithmic process. For particularly complex algorithms, you are not even required to write them by hand.

See, it’s so easy for me to make peace with myself.

Article summary

This section summarizes relevant articles and links on basic operations research algorithms in the past year, and categorizes them according to previous target designs.

Classification Articles and links
Nonlinear programming-golden section method Python and Java code implementation: golden section method to solve one-dimensional optimization problem
Nonlinear programming-tangent method Python and Java code implementation: tangent method to solve one-dimensional optimization problems
Nonlinear programming-coordinate rotation method Python code implementation: coordinate rotation method to solve multi-dimensional optimization problems
Nonlinear programming-gradient algorithm Gradient algorithm principles: steepest descent method, Newton method and quasi-Newton method
Quasi-Newton method: python code implementation
Nonlinear programming-indirect method Solving optimization problems with constraints: Lagrange multiplier method and KKT conditions
Nonlinear programming-direct method Solving optimization problems with constraints: Penalty function method
Linear Programming-Simplex Method Linear Programming and Simplex Method-Principles
Linear Programming Model-Engineering Application
Linear Programming-Integer Programming The cutting plane method and the branch-and-bound method for solving integer programming problems
Let’s hold back for a moment and talk about why we can’t stop at the harmonious solver
Linear Programming-Dual Problem Linear programming dual problems: theoretical derivation and practical applications
Intelligent Optimization-DE Differential evolution algorithm is still strong
Intelligent Optimization-ACO The ant colony algorithm is used to find the TSP of 34 domestic cities, which is not that different from the optimal solution.
Intelligent optimization-ALNS Really good adaptive large neighborhood search algorithm ALNS

Experience summary

Regarding the learning and understanding of operational research algorithms over the past year, the summary is as follows:

First of all, these algorithms are basic content in operations research. Through the study and summary of these knowledge points, I have benefited a lot, which to a certain extent has made up for my lack of basic knowledge reserves due to my non-technical background. But this is just the beginning. As your knowledge improves, you may find more and more unknown content. There is still a lot of content that needs to be explored slowly in the future.

Secondly, I am more application-oriented in learning. When I first chose operations research as my long-term career in the future, I mainly felt that applying these algorithmic strategies to actual scenarios would bring a great sense of accomplishment, so I would not be obsessed with theoretical derivation. When learning knowledge, Priority will be given to the most commonly used operational algorithms in industrial practice, supplemented by some basic algorithm principles to understand what they are and why they are so.

Finally, the way these knowledge points are connected is based on my current knowledge. The classification in the picture only relies on my current practical path of systematic learning and is not authoritative. It can be used as a reference for everyone to build their own knowledge system.

a notice

Let me give you a sneak preview of the topic of articles in the field of operations research and optimization next year. The high probability is stochastic optimization and robust optimization, that is, the optimal decision-making when there is uncertainty in the model input.

I haven't thought about the specific learning path yet - of course, even if I have thought it through, I won't make it public directly. There is a high probability that it will be similar to this. I will summarize it at the end of next year!

Finally, I hope everyone can persevere in doing small things, work hard slowly, and amaze everyone.

Guess you like

Origin blog.csdn.net/taozibaby/article/details/134913797