비용 함수
qiskit_addon_mpf.costs
MPF 계수에 대한 비용 함수.
이 모듈은 다양한 최적화 문제 생성기 함수를 제공하며, 각 함수는 문제의 목표가 되는 비용 함수를 다르게 구현합니다. 이 모듈에서 제공하는 모든 함수는 선형 방정식 시스템(LSE) 최적화 문제의 매개 변수를 첫 번째 인수로 인코딩합니다.
LSE
class LSE(A, b)
베이스: NamedTuple
선형 방정식 시스템을 나타내는 namedtuple .
LSE(A, b)의 새 인스턴스 생성
매개변수
A
유형: ndarray
LSE의 왼쪽입니다.
b
유형: ndarray
LSE의 오른쪽에 있습니다.
count
count(value, /)
값의 발생 횟수를 반환합니다.
index
index(value, start=0, stop=9223372036854775807, /)
첫 번째 값 인덱스를 반환합니다.
값이 없으면 ValueError 을 반환합니다.
solve
solve()
이 LSE에 솔루션을 반환합니다: .
리턴
이 LSE에 대한 솔루션입니다.
레이즈
- ValueError - 이 LSE가 할당되지 않은 값으로 매개변수화된 경우.
- ValueError - 이 LSE에 유효한 MPF 계수에 대한 요구 사항인 을 보장하는 행이 포함되어 있지 않은 경우.
리턴 유형
x
유형: Variable
X$를 반환합니다 Variable.
최적화 문제 생성기
setup_exact_problem
setup_exact_problem(lse)
구성 cvxpy.Problem 를 생성하여 정확한 MPF 계수를 찾습니다.
이 최적화 문제를 통해 찾은 계수는 분석에서 얻은 계수와 동일합니다 LSE.solve() 메서드에서 얻은 분석 계수와 동일합니다. 이 추가 인터페이스는 이 모듈에서 제공하는 다른 비용 함수와의 유사성을 강조하기 위해 존재합니다. 또한 MPF 계수를 대상으로 하는 최적화 문제에 접근하는 방법에 대한 교육적 목적도 있습니다.
이 함수에 의해 구성된 최적화 문제는 다음과 같이 정의됩니다:
예는 다음과 같습니다.
>>> from qiskit_addon_mpf.costs import setup_exact_problem
>>> from qiskit_addon_mpf.static import setup_static_lse
>>> lse = setup_static_lse([1,2,3], order=2, symmetric=True)
>>> problem, coeffs = setup_exact_problem(lse)
>>> print(problem)
minimize norm1(x)
subject to Sum([1. 1. 1.] @ x, None, False) == 1.0
Sum([1. 0.25 0.11111111] @ x, None, False) == 0.0
Sum([1. 0.0625 0.01234568] @ x, None, False) == 0.0그런 다음 문제를 풀고 다음과 같이 확장 계수에 액세스할 수 있습니다:
>>> final_cost = problem.solve()
>>> print(coeffs.value)
[ 0.04166667 -1.06666667 2.025 ]매개변수
lse (LSE) – 모델을 구축할 선형 방정식 시스템입니다.
리턴
최적화 문제와 계수 변수입니다.
리턴 유형
참조
[1] : A. Carrera Vazquez 외., 퀀텀 7, 1067 (2023).
setup_sum_of_squares_problem
setup_sum_of_squares_problem(lse, *, max_l1_norm=10.0)
구축 cvxpy.Problem 를 생성하여 대략적인 MPF 계수를 구합니다.
이 함수에 의해 구성된 최적화 문제는 다음과 같이 정의됩니다:
- 비용 함수는 거리의 제곱의 합(
sum_squares())의 제곱합을 최소화하여 모든 방정식에 대한 정확한 해를 구합니다LSE:
-
두 가지 제약 조건이 설정됩니다:
- 변수의 합계가 1이어야 합니다:
- L1-norm (
norm1)의 변수는max_l1_norm
예는 다음과 같습니다.
>>> from qiskit_addon_mpf.costs import setup_sum_of_squares_problem
>>> from qiskit_addon_mpf.static import setup_static_lse
>>> lse = setup_static_lse([1,2,3], order=2, symmetric=True)
>>> problem, coeffs = setup_sum_of_squares_problem(lse, max_l1_norm=3.0)
>>> print(problem)
minimize quad_over_lin(Vstack([1. 1. 1.] @ x + -1.0,
[1. 0.25 0.11111111] @ x + -0.0,
[1. 0.0625 0.01234568] @ x + -0.0), 1.0)
subject to Sum(x, None, False) == 1.0
norm1(x) <= 3.0그런 다음 문제를 풀고 다음과 같이 확장 계수에 액세스할 수 있습니다:
>>> final_cost = problem.solve()
>>> print(coeffs.value)
[ 0.03513467 -1. 1.96486533]매개변수
리턴
최적화 문제와 계수 변수입니다.
리턴 유형
참조
[1] : S. 주크 외., 실제 Rev. Research 6, 033309 (2024).
https://journals.aps.org/prresearch/abstract/10.1103/PhysRevResearch.6.033309
setup_frobenius_problem
setup_frobenius_problem(lse, *, max_l1_norm=10.0)
구축 cvxpy.Problem 를 생성하여 대략적인 MPF 계수를 구합니다.
이 함수에 의해 구성된 최적화 문제는 다음과 같이 정의됩니다:
- 로 설정하면 비용 함수는 다음과 같은 이차식을 최소화합니다:
그림 [1과] [2에서] 볼 수 있듯이 이 표현식은 정확한 시간 진화 상태와 동적 MPF 사이의 오차에 대한 프로베니우스 규범에서 발생합니다. 따라서 LSE 로 구성된 setup_dynamic_lse() 를 이 함수에 연결하면 Eq. (20)의 [1] (Eq. (2)의 ( [2] )를 반복하며, 아래에서 반복합니다
여기서 $A$와 $b$는 LSE 는 각각 그램 행렬( [1과] [2의] $M$)과 중첩 벡터( [1과] [2의] $L$)에 해당합니다. 또한 [1과] [2에서] $c$ 대신 $x(t)$를 사용하여 MPF 변수(또는 계수)를 표시합니다.
-
두 가지 제약 조건이 설정됩니다:
- 변수의 합계가 1이어야 합니다:
- L1-norm (
norm1)의 변수는max_l1_norm
다음은 예제에서 생성된 lse 객체를 사용하는 예제입니다 setup_dynamic_lse().
>>> from qiskit_addon_mpf.costs import setup_frobenius_problem
>>> problem, coeffs = setup_frobenius_problem(lse, max_l1_norm=3.0)
>>> print(problem)
minimize 1.0 + QuadForm(x, [[1.00 1.00]
[1.00 1.00]]) + -[2.00003171 1.99997911] @ x
subject to Sum(x, None, False) == 1.0
norm1(x) <= 3.0그런 다음 문제를 풀고 다음과 같이 확장 계수에 액세스할 수 있습니다:
>>> final_cost = problem.solve()
>>> print(coeffs.value)
[0.50596416 0.49403584]매개변수
리턴
최적화 문제와 계수 변수입니다.
리턴 유형
참조
[1] : S. 주크 외., 실제 Rev. Research 6, 033309 (2024).
https://journals.aps.org/prresearch/abstract/10.1103/PhysRevResearch.6.033309
[2] : N. 로버트슨 외., arXiv:2407.17405v2 (2024).