# Combinatorial Optimization Problems and Metaheuristics: Review, Challenges, Design, and Development
## 4 Results: Standardization, Methodology, and Framework for COP and Metaheuristics
### Problem Representation: Formulation and Standards  
To understand, design, and implement a combinatorial optimization problem is a challenging activity because it requires knowledge of the problem and technical skills related to optimization problems and coding. This section aims to answer RQ-4: _How can we develop a body of knowledge to formulate combinatorial optimization problems in a standard way?_ By answering this question, we expect to identify the vital elements that should be part of a COP and arrange them in a general and independent software unit. Additionally, the answer to this question is a foundational premise that sustains the entire framework definition because it is the core knowledge item that will be manipulated by the algorithms. This is the reason and purpose of the framework's existence.  
Moreover, to answer this question properly, we need to take into consideration the following four assumptions. The first is related to the COP composition and structure. We also need to answer the question: _What are the building blocks necessary to accommodate several categories (or all) problems in a standard design?_ The second must concern conceiving COP as a self-contained unit (single unit) that provides a common behavior that can be manipulated (used or reused) by any method that knows its functioning standards. The third assumption lies in the fact that problems must be defined by a specification. A problem specification is a higher-level definition of the problem that defines the behavior of the problem class. The fourth must consider that problem specifications cannot affect or demand code changes from any algorithm of the framework (e.g., metaheuristics, subordinated heuristics, even in problem core components).  
Before proceeding to the COP building blocks explanations, an essential distinction must be provided.  
From a practical point of view, optimization problems have two levels of abstraction considering their specification: (1) abstract level, also known as problem template (PT), and (2) concrete level, also known as a problem instance (PI). A problem template is a conceptual model of the problem that specifies a class of problems with a specific objective. Thus, a PT encompasses the general definitions of the problem that can be followed (or reused) by several problem instances. On the other hand, a PI is based on a PT and since the template gives the conceptual level, an instance must provide the specific data that instantiate a particular case of the abstract problem. Consequently, a problem template \(P\) can have an infinite number of instances \(P=\{p_{1},\ p_{2},\ldots,\ p_{n}\}\).  
Therefore, a PT provides the upper-level building blocks representing the high-level problem definition and can be reused by any instance of this problem (e.g., objective(s), objective function(s), constraints requirements, solution encoding rules, decision variables design, etc.) In contrast, a PI must provide the data of the concrete problem (e.g., decision variable values and constraints values).