-
최적설계 | 파이썬 기반 이차계획문제 알고리즘 qpsolvers.solve_qpEngineering/Optimum Design 2025. 7. 25. 18:00반응형
1. qpsolvers
qpsolvers는 파이썬 기반의 오픈소스 패키지로, 이차계획문제 풀이를 위한 다양한 알고리즘을 제공한다. 파이썬 기반의 연산 패키지인 NumPy와도 호환이 가능해 복잡하게 형식을 정의할 필요가 없어 편리하게 이용할 수 있다. 해당 패키지는 아래 명령어를 명령 프롬프트에 입력하여 설치할 수 있다. 아래 링크로 접속하면 qpsolvers 패키지에 대한 자세한 설명을 확인할 수 있다.
pip install qpsolversGitHub - qpsolvers/qpsolvers: Quadratic programming solvers in Python with a unified API
Quadratic programming solvers in Python with a unified API - qpsolvers/qpsolvers
github.com
qpsolvers 패키지를 성공적으로 설치했다면, 이차계획문제 풀이에 사용할 알고리즘을 추가로 설치해주어야 한다. 해당 패키지를 통해 Clarabel, CVXOPT, DAQP 등 다양한 알고리즘을 적용할 수 있는데, 사용하고자 하는 알고리즘의 이름을 포함하여 명령 프롬프트에 명령어를 입력하면 설치할 수 있다. 해당 글에서 다룰 예제에서는 CVXOPT 알고리즘을 사용하고자 하므로 명령 프롬프트에 아래와 같은 명령문을 입력하여 설치하였다. 아래 링크로 qpsolvers 패키지에서 지원하는 이차계획문제 풀이 알고리즘의 종류와 설명을 확인할 수 있다.
pip install qpsolvers[cvxopt]Supported solvers - qpsolvers 4.7.0 documentation
Previous Least squares
qpsolvers.github.io
2. qpsolvers.solve_qp
해당 패키지가 다루는 이차계획문제는 다음과 같은 형식을 가진다. 따라서 해당 패키지를 이용해 이차계획문제를 풀고자 한다면 해당 형식을 따라 문제를 수정할 필요가 있다. 아래 형식에 맞게 가격계수 행렬과 가격계수 벡터, 부등호제약조건 행렬, 등호제약조건 행렬, 설계변수 범위 벡터를 numpy.array로 정의하여 함수에 차례대로 입력하면 알고리즘에 따라 최적화된 결과를 도출한다.
$$ \begin{align} \mathrm{minimize}~~~~&f = \frac{1}{2} \mathbf{x}^T \mathbf{P} \mathbf{x} + \mathbf{q}^T \mathbf{x} \\\\ \mathrm{subject~to}~~~~ &\mathbf{G} \mathbf{x} \leq \mathbf{h} \\\\ &\mathbf{A} \mathbf{x} = \mathbf{b} \\\\ &\mathbf{lb} \leq \mathbf{x} \leq \mathbf{ub} \end{align}$$
아래 링크로 접속하면 해당 함수에 해당 함수에 대한 자세한 설명을 확인할 수 있다.Quadratic programming - qpsolvers 4.7.0 documentation
Previous Installation
qpsolvers.github.io
3. 파이썬 라이브러리 설치
qpsolver 라이브러리를 원활하게 사용하기 위해서는 몇 가지 라이브러리를 추가로 설치해야 한다. 인터넷에 연결된 상태에서 명령 프롬프트에 아래 명령어들을 하나씩 입력하는 것으로 설치할 수 있다.
pip install numpy4. 예제

이차계획문제 다음 이차계획문제를 최적화 알고리즘을 이용해 최적화해보자.
$$ \begin{align} \mathrm{minimize}~~~~&f = \left( x_1-3 \right)^2 + \left( x_2-3 \right)^2 \\\\ \mathrm{subject~to}~~~~&x_1 + x_2 \leq 4 \\\\ &x_1 - 3x_2 = 1 \\\\ &x_1 \geq 0,~~x_2 \geq 0 \end{align}$$
알고리즘에서 요구하는 형식에 맞게 위 이차계획문제를 바꾸어 나타내면 다음과 같다.
$$ \begin{align} \mathrm{minimize}~~~~&f = x_1^2 + x_2^2 -6x_1 -6x_2 \\\\ \mathrm{subject~to}~~~~&x_1 + x_2 \leq 4 \\\\ &x_1 - 3x_2 = 1 \\\\ &0 \leq x_1 \leq +\infty,~~0 \leq x_2 \leq +\infty \end{align}$$
위 이차계획문제를 행렬식으로 나타내면 다음과 같다.
$$ \begin{align} \mathrm{minimize}~~~~&f = \frac{1}{2} \mathbf{x}^T \mathbf{P} \mathbf{x} + \mathbf{q}^T \mathbf{x} \\\\ \mathrm{subject~to}~~~~ &\mathbf{G} \mathbf{x} \leq \mathbf{h} \\\\ &\mathbf{A} \mathbf{x} = \mathbf{b} \\\\ &\mathbf{lb} \leq \mathbf{x} \leq \mathbf{ub} \end{align}$$$$ \begin{align} &\mathbf{P} = \begin{bmatrix} 2 & 0 \\ 0 & 2 \\ \end{bmatrix},~~~~ \mathbf{q} = \begin{bmatrix} -6 \\ -6 \\ \end{bmatrix}\\\\ &\mathbf{G} = \begin{bmatrix} 1 & 1 \\ \end{bmatrix},~~~~ \mathbf{h} = \begin{bmatrix} 4 \\ \end{bmatrix}\\\\ &\mathbf{A} = \begin{bmatrix} 1 & -3 \\ \end{bmatrix},~~~~ \mathbf{b} = \begin{bmatrix} 1 \\ \end{bmatrix}\\\\ &\mathbf{lb} = \begin{bmatrix} 0 \\ 0 \\ \end{bmatrix},~~~~ \mathbf{ub} = \begin{bmatrix} +\infty \\ +\infty \\ \end{bmatrix} \end{align}$$# 라이브러리 추가 import numpy as np from qpsolvers import solve_qp # 이차계획문제 가격계수 행렬 및 벡터 정의 P = np.array([[2.0, 0.0], [0.0, 2.0]]) q = np.array([-6.0, -6.0]) # 선형계획문제 부등호제약조건 행렬 정의 G = np.array([1.0, 1.0]) h = np.array([4.0]) # 선형계획문제 등호제약조건 행렬 정의 A = np.array([1.0, -3.0]) b = np.array([1.0]) # 설계변수 범위 벡터 정의 lb = np.array([0.0, 0.0]) ub = np.array([+np.inf, +np.inf]) # 이차계획문제 최적화 알고리즘 x = solve_qp(P, q, G, h, A, b, lb, ub, solver="cvxopt") # 이차계획문제 최적 결과 출력 print(x)
[함께 읽으면 좋은 페이지]
파이썬이란?
1. 프로그래밍 언어 컴퓨터가 작업을 수행하기 위해서는 논리적인 순서에 맞게 명령문이 나열된 작업지시서를 사람으로부터 전달 받아야 한다. 하지만 컴퓨터는 0과 1로 구성된 기계어(machine
vedacube.tistory.com
최적설계 | 이차계획법
1. 이차계획법 이차계획법(Quadratic Programming, QP)은 선형계획법과는 다르게 이차목적함수와 선형제약조건을 갖는다. 실제 응용에서도 많이 찾아볼 수 있으며, 일반적인 비선형계획 알고리즘은 매
vedacube.tistory.com
참고문헌
- stephane-caron. (n.d.). Quadratic Programming Solvers in Python. https://github.com/qpsolvers/qpsolvers?tab=readme-ov-file#example. 2025.05.19.반응형'Engineering > Optimum Design' 카테고리의 다른 글
최적설계 | 제약조건 문제 수치해법(4): 부정확 이동거리 탐색법 (0) 2025.09.26 최적설계 | 제약조건 문제 수치해법(3): 순차 이차계획법 SQP (1) 2025.08.22 최적설계 | 이차계획법 (0) 2025.06.27 최적설계 | 제약조건 문제 수치해법(2): 순차 선형계획법 SLP (0) 2025.05.30 최적설계 | 제약조건 문제 수치해법(1): 설계문제 선형화 (0) 2025.05.02