Программа, которую я сейчас использую, нацелена на генерацию циклического представления, похожего на предоставленное изображение. Однако при запуске кода я сталкиваюсь с несколькими ошибками, и вывод не соответствует ожидаемому изображению. Любая помощь в решении этих проблем будет высоко оценена. Изображение, которое я хочу выглядеть как=
"код"
\documentclass[border=0.1cm]{revtex4-2}
%
\usepackage[dvipsnames]{xcolor}
\usepackage{tikz}
\usepackage{circuitikz}
\usepackage{qcircuit}
\usetikzlibrary{positioning, arrows.meta}
% Create style for node rectangles
\tikzstyle{state}=[
rectangle,
minimum width=1.5cm,
minimum height=1cm,
draw=white,
thick,
text=black,
font=\bfseries,
align=center,
fill=Orange!70,
rounded corners=5pt % Adjust the radius as needed
]
\begin{document}
% \begin{tikzpicture}[>=Stealth, thick, text=black, font=\sffamily]
%%%%
\tikzset{meter/.append style={draw, inner sep=10, rectangle, font=\vphantom{A}, minimum width=30, minimum height=10 line width=.5, path picture={\draw[black] ([shift={(.1,.3)}]path picture bounding box.south west) to[bend left=50] ([shift={(-.1,.3)}]path picture bounding box.south east);\draw[black,-latex] ([shift={(0,.1)}]path picture bounding box.south) -- ([shift={(.3,-.1)}]path picture bounding box.north);}}}
%
%
% \begin{tikzpicture}[-stealth, thick, text=black]
\begin{tikzpicture}[>=Stealth, thick, text=black, font=\sffamily]
% State q0
\node[state, minimum width=2.cm, minimum height=0.5cm] (A) at (90:2) {\rm {Optimizer}};
% State q1
\node[state, fill=NavyBlue, minimum width=2.cm, minimum height=0.5cm, left=-1 cm] (B) at (18:2) {\rm R({$\Theta$},{$X$})};
\node[above] at (B.north) {{$\Theta$}};
% Box on the side of q1
\node[state, fill=NavyBlue, minimum width=1.cm, minimum height=0.5cm] (B_side) at (3.8,0.6) {$|0\rangle$};
\node[below=0.7 cm,left=-0.4 cm] at (B_side.east) {Quantum};
\node[below=0.9cm,left=-0.4 cm] at (B_side.east) {pre-processing};
\draw[-stealth] (B_side) -- (B);
% \node[below=0.3cm, align=center, font=\footnotesize] at (B_side.east) {Quantum\\pre-processing};
% Box on top of q1
\node[state, fill=Orange, minimum width=1.5cm, minimum height=0.8cm] (B_top) at (2.2,2.1) {Data: {x}};
\node[above] at (B_top.east) {};
\draw[-stealth] (B_top) -- (B);
% State q2
\node[state, fill=NavyBlue, minimum width=1.cm, minimum height=.5cm, left=-2.2 cm] (C) at (-32:2) {
~\Qcircuit @C=.4em @R=.3em{
\gate{R_y}&\gate{R_z} &\qw &
\gate{R_y}&\gate{R_z}
\protect\gategroup{1}{1}{1}{2}{0.25em}{--}
\protect\gategroup{1}{4}{1}{5}{0.25em}{--}
}};
\node[above=0.4cm, right=-0.0 cm] at (C.north west) {Quantum circuit};
% State q3
\node[meter, state, fill=NavyBlue, minimum width=2.cm, minimum height=0.2cm] (D) at (-147:2) {M};
% \node[meter, state, fill=NavyBlue, minimum width=2.cm, minimum height=0.5cm] (meter) at (-138:2) {M};
\node[above=0.01cm] at (D.north west) {State measurement};
% State q4
\node[state, minimum width=2.cm, minimum height=0.5cm] (E) at (162:2) {$f(|\langle y | \phi \rangle |^2 )$};
\node[above=-0.5] at (E.north) {post-processing};
% Transition q0 to q1
\draw[-stealth] (A) to[bend left=30] node[above]{Parameter} (B);
% Transition q1 to q2
\draw[-stealth] (B) to[bend left=15] node[right]{$e_1$} (C);
% Transition q2 to q3
\draw[-stealth] (C) to[bend left=15] node[right]{$e_2$} (D);
% Transition q3 to q4
\draw[-stealth] (D) to[bend left=15] node[below=-0.4 cm, right=0.1 cm]{Quantum state$ |\phi\rangle$} (E);
% Transition q4 to q0
\draw[-stealth] (E) to[bend left=30] node[left]{Classical} (A);
\end{tikzpicture}
%
\end{document}
ПС: Смотрите мою модификациюздесь, с некоторыми незначительными оставшимися проблемами, описанными там.
решение1
В ответ на вашдополнительный вопрос.
Анализ
Первое, что я сделал, — нарисовал круг для справки, чтобы увидеть довольно большие отклонения:
% ~~~ a circle for reference ~~~
\draw (0,0) circle[radius=\rd];
Вскоре я отказался от своей первой идеи заменить каждое из них to[bend left]
отдельными to[bend in=, out=]
операторами, где каждый входной и выходной угол можно было бы настроить вручную. Но это требует много работы.
Поэтому мне пришла в голову идея
- поместить круг позади всех остальных путей (т.е. нарисовать его первым)
- украсив его стрелками, см. гл.50.6.1 Маркировка наконечника стрелыв pgfmanual
Решение, сверху вниз
Загрузите библиотеку \usetikzlibrary{decorations.markings}
.
Определите маркировку декора. Особенность здесь в том, что круг нарисован математически, т. е. против часовой стрелки. Вот почему стрелки оформлены как перевернутые стрелки. Вы можете изменить их стиль, как с узлами. Я пометил их красным, чтобы они были более заметны. Позиции получены методом проб и ошибок, и, возможно, не так уж и плохо иметь их «посередине», более или менее.
decoration={% will put arrows along the path (here: a counter clockwise circle)
markings,
mark=at position 0 with {\arrowreversed[red]{Stealth}},% (0:\rd) or east, so to say
mark=at position .15 with {\arrowreversed[red]{Stealth}},
mark=at position .35 with {\arrowreversed[red]{Stealth}},
mark=at position .5 with {\arrowreversed[red]{Stealth}},% west
mark=at position .75 with {\arrowreversed[red]{Stealth}},% south
},
Итак, давайте украсим круг:
% ~~~ a circle for reference, alter with decoration ~~~
% \draw (0,0) circle[radius=\rd];
\draw[postaction={decorate}] (0,0) circle[radius=\rd];
Давайте удалим все соединения, которые больше не нужны:
% Connections
% \draw[->] (OP) to[bend left] node[arrlbl,anchor=west,pos=.8]{} (QP.70);
% \draw[->] (QP) to[bend left] node[arrlbl,anchor=west,pos=.8]{} (QC.65);
% \draw[->] (QC) to[bend left] node[arrlbl,anchor=west,pos=.8]{} (QM);
% \draw[->] (QM) to[bend left] node[arrlbl,anchor=west,pos=.8, black] {Quantum state:\\$|\phi\rangle$} (PP);
% \draw[->] (PP) to[bend left] node[arrlbl,anchor=west,pos=.8]{} (OP);
Сохраните теперь отсутствующую метку. Есть много способов разместить ее, как и любой узел.
% ~~~ moved label ~~~~~~~~~~~~~~~~~
\node[arrlbl,anchor=north west] at (PP.300) {Quantum state:\\$|\phi\rangle$};
Теперь внесите свои коррективы. Кстати, вы можете переписать state
стиль для квантовой схемы, чтобы сделать ее немного больше, например:
\node[state,minimum height=12mm] (QC) at ( -30:\rd) {
...
%%%%%%%%%%%%%%%%%
%\documentclass{article} % ok to use
\documentclass[10pt,border=3mm,tikz]{standalone} % I find this more useful for development
\usepackage{tikz}
\usetikzlibrary{arrows.meta}
% \usetikzlibrary{quantikz}
\usepackage{qcircuit}
\usepackage[absolute,overlay]{textpos}
\usetikzlibrary{shapes}
\newcommand\rd[0]{32mm} % radius for the circle placement
\usetikzlibrary{decorations.markings} % <<< new
\begin{document}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Define the measurement symbol style
\tikzset{
meter/.style={
draw,
inner sep=10pt,
rectangle,
font=\vphantom{A},
minimum width=30pt,
minimum height=10pt,
line width=.5pt,
path picture={
\draw[black] ([shift={(2pt,7pt)}]path picture bounding box.south west) to[bend left=50] ([shift={(-2pt,7pt)}]path picture bounding box.south east);
\node[anchor=center] at (path picture bounding box.center) {$M$};
\draw[black,-latex] ([shift={(0pt,3pt)}]path picture bounding box.south) -- ([shift={(10pt,-5pt)}]path picture bounding box.north);
}
}
}
%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%
\begin{tikzpicture}[
geom/.style={
rounded corners,
minimum width=25mm,
minimum height=9mm,
},
state/.style={fill=blue!40!teal!40,geom},
other/.style={fill=orange!40,geom},
txt/.style={align=center,font={\small\sffamily}},
arrlbl/.style={blue,align=center}, % < < < replace blue by black if you prefer
% ~~~ new ~~~~~~~~~
decoration={% will put arrows along the path (here: a counter clockwise circle)
markings,
mark=at position 0 with {\arrowreversed[red]{Stealth}},% (0:\rd) or east, so to say
mark=at position .15 with {\arrowreversed[red]{Stealth}},
mark=at position .35 with {\arrowreversed[red]{Stealth}},
mark=at position .5 with {\arrowreversed[red]{Stealth}},% west
mark=at position .75 with {\arrowreversed[red]{Stealth}},% south
},
]
% ~~~ a circle for reference, later with decoration ~~~
% \draw (0,0) circle[radius=\rd];
\draw[postaction={decorate}] (0,0) circle[radius=\rd];
% Blocks
\node[other] (OP) at ( 90:\rd) {\large Optimizer};
\node[state] (QP) at ( 20:\rd) {$R(\{\vec{\Theta}\},\{\vec{X}\})$};
\node[state] (QC) at ( -30:\rd) {
\resizebox{.45\linewidth}{!}{
\hspace{-.58cm}~\Qcircuit @C=.8em @R=.5em{
\push{\cdots} &\gate{R_y} & \gate{R_z} & \gate{R_y} & \gate{R_z}&\cdots\\
% & & & & \\
% & & & & & \\
\protect\gategroup{1}{2}{1}{3}{0.3em}{--}
\protect\gategroup{1}{4}{1}{5}{0.3em}{--}
}
}
};
\node[meter, state] (QM) at ( 210:\rd) {M};
\node[other] (PP) at ( 160:\rd) {$f(|\langle y | \phi \rangle |^2 )$ };
% ~~~ (1) relative placement of other blocks
% \node[state] (QX) at ([xshift=\rd]QP) {QX}; % before step (5)
\node[rounded corners, fill=blue!40!teal!40] (QX) at ([shift=(0:2)]QP) {$|0\rangle$};
\node[rounded corners, fill=orange!40] (DT) at ([shift=(75:2)]QP) {\large Data: $\{\vec{X\}}$};
% Connections
% \draw[->] (OP) to[bend left] node[arrlbl,anchor=west,pos=.8]{} (QP.70);
% \draw[->] (QP) to[bend left] node[arrlbl,anchor=west,pos=.8]{} (QC.65);
% \draw[->] (QC) to[bend left] node[arrlbl,anchor=west,pos=.8]{} (QM);
% \draw[->] (QM) to[bend left] node[arrlbl,anchor=west,pos=.8, black] {Quantum state:\\$|\phi\rangle$} (PP);
% \draw[->] (PP) to[bend left] node[arrlbl,anchor=west,pos=.8]{} (OP);
\draw[->] (DT) -- (QP.35);
\draw[->] (QX) -- (QP);
% ~~~ moved label ~~~~~~~~~~~~~~~~~
\node[arrlbl,anchor=north west] at (PP.300) {Quantum state:\\$|\phi\rangle$};
% Extra labels
\node[txt] at ([shift=(-100:-0.8)]QM) {\large Quantum state measurement};
\node[txt] at ([shift=(90:0.7)]PP) {\large Classical post-processing};
\node[txt] at ([shift=( -85:1.0)]QX) {\large Quantum\\pre-processing};
\node[txt] at ([shift=(-100:1.7)]QP) {\large Quantum circuit};
\node[txt] at ([shift=(30:-1.2)]QC) {Layer i};
\node[txt] at ([shift=(150:-1.2)]QC) {Layer i+1};
\node[txt,font = {\large}, red] at ([shift=(128:1.3)]QP) {Parameters:\\$\{\vec\Theta\}$};
\end{tikzpicture}
\end{document}
решение2
Вот вам отправная точка. Она незакончена, потому что:
- Я не могу извлечь все из вашего кода.
- он пытается показать вам пошаговое итеративное усовершенствование
- поэтому он останавливается на чем-то, что может стать для вас новой отправной точкой.
Давайте рассмотрим некоторые детали:
- Я выделил процесс в виде комментариев.
- (1) размещает нестилизованные узлы на окружности, где вы можете изменить ее радиус
\newcommand\rd[0]{35mm}
- (2), прямые соединения, теперь показаны начальные линии с первым
bend
введенным элементом; не сгибайте слишком рано, сначала сосредоточьтесь на более важных деталях - для метки соединений я показал стиль, якорь, а для демонстрации — позицию
- предварительные стили (3) на данный момент достаточно хороши и будут доработаны к концу создания всего этого
- изменение-только-в-одном-месте - вот их парадигмы; см., например, роль стиля
geom
UNDONE пока что являются счетчик (не удалось найти код) и то, что внутри "Quantum Circuit". Это места, куда вы можете позвонить tikz
внутрь tikz
, что крайне не рекомендуется.
В качестве альтернативы я предлагаю создавать эти чертежи отдельно, используя standalone
класс, как это сделано здесь, И \includegraphics
(т.е. те .pdf) через package graphicx
. Смотрите, напримерздесь (ПИ-контроллер)для этого подхода.
Теперь вы переходите к фазе смешивания, где вы оба:
- ввести больше контента
- хотите или должны скорректировать размещение, стили и т. д.
Но теперь, я надеюсь, это станет более осуществимым.
% ~~~ Procedure of stepwise iterative refinement ~~~~~~~~~
% (1) place nodes with dummy content, to check general placement
% (2) draw straight connections; bends can be done later
% (3) introduce preliminary styles for the blocks
% (4) introducing extra labels for block descriptions;
% add+adjust styles as minimalistic as possible+needed
% (5) start refining nodes text contents
% (6) let's have nicer arrow tips
% (7) first labels at connections
\documentclass[10pt,border=3mm,tikz]{standalone}
\usetikzlibrary{arrows.meta}
\newcommand\rd[0]{35mm} % radius for the circle placement
\begin{document}
\begin{tikzpicture}[% (3)
geom/.style={
rounded corners,
minimum width=25mm,
minimum height=8mm,
},
state/.style={fill=blue!40!teal!40,geom},
other/.style={fill=orange!40,geom},
txt/.style={align=center,font={\small\sffamily}},
>={Stealth}, % (6)
arrlbl/.style={blue,align=center},
]
% ~~~ (1) placing your "blocks" on circle ~~~~~~~~~~
%\node (OP) at ( 90:\rd) {Optimizer}; % for reference: from step (1)
\node[other] (OP) at ( 90:\rd) {Optimizer};
% \node[state] (QP) at ( 20:\rd) {PreProc};
\node[state] (QP) at ( 20:\rd) {$R(\{\vec{\Theta}\},\{\vec{X}\})$};
\node[state] (QC) at ( -30:\rd) {Quantum Circuit};
\node[state] (QM) at ( 210:\rd) {Quantum Meas};
% \node[other] (PP) at ( 160:\rd) {PostProc};
\node[other] (PP) at ( 160:\rd) {$f(|\langle y | \phi \rangle |^2 )$ };
% ~~~ (1) relative placement of other blocks
% \node[state] (QX) at ([xshift=\rd]QP) {QX}; % before step (5)
\node[state] (QX) at ([xshift=\rd]QP) {$|0\rangle$};
\node[other] (DT) at ([shift=(60:4)]QP) {Data: $\{\vec{X\}}$};
% ~~~ (2) draw connections ~~~~~~~~~~
\draw[->] (OP) -- (QP);
\draw[->] (QP) -- (QC);
\draw[->] (QC) -- (QM);
\draw[->] (QM) to[bend left]
node[arrlbl,anchor=east,pos=.3]
{Quantum\\state:$|\phi\rangle$}
(PP);
\draw[->] (PP) -- (OP);
\draw[->] (DT) -- (QP.30); % polar: x deg at node QP's shape
\draw[->] (QX) -- (QP);
% ~~~ (4) (first) extra labels for block desciptions ~~~~
\node[txt] at ([shift=(130:1.5)]PP) {Classical\\post-processing};
\node[txt] at ([shift=( 60:1.0)]QX) {Quantum\\pre-processing};
\node[txt] at ([shift=(-40:1.5)]QP) {Pre-\\processor};
\end{tikzpicture}
\end{document}
Для справки, пожалуйста, посмотрите мою попытку поработать с вашим кодом и рефакторить его для большей читабельности. В этот момент мне стало очевидно, что его следует переделать с нуля с другим подходом. Вы могли бы украсить его еще больше (что также уменьшает проблемы), но... вещи просто были слишком перемешаны для этого.
%\documentclass[border=0.1cm]{revtex4-2}
\documentclass[10pt,border=3mm,tikz]{standalone}
%
\usepackage[dvipsnames]{xcolor}
%\usepackage{tikz}
\usepackage{circuitikz}
\usepackage{qcircuit}
\usetikzlibrary{positioning, arrows.meta}
% Create style for node rectangles
\tikzstyle{state}=[
rectangle,
minimum width=1.5cm,
minimum height=1cm,
draw=white,
thick,
text=black,
font=\bfseries,
align=center,
fill=Orange!70,
rounded corners=5pt % Adjust the radius as needed
]
\begin{document}
% \begin{tikzpicture}[>=Stealth, thick, text=black, font=\sffamily]
%%%%
\tikzset{
meter/.append style={draw, inner sep=10, rectangle, font=\vphantom{A},
minimum width=30, minimum height=10 line width=.5,
path picture={\draw[black] ([shift={(.1,.3)}]path picture bounding box.south west) to[bend left=50] ([shift={(-.1,.3)}]path picture bounding box.south east);\draw[black,-latex] ([shift={(0,.1)}]path picture bounding box.south) -- ([shift={(.3,-.1)}]path picture bounding box.north);}}
}
%
%
% \begin{tikzpicture}[-stealth, thick, text=black]
\begin{tikzpicture}[
>=Stealth, thick,
text=black,
font=\sffamily,
w2h/.style={minimum width=2.cm, minimum height=0.5cm},
wh/.style={minimum width=1.cm, minimum height=0.5cm},
fNB/.style={fill=NavyBlue},
lbl/.style={align=center,font=\small},
]
% ~~~ placing nodes ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
% State q0
\node[state, w2h] (A) at (90:2) {\rm {Optimizer}};
% State q1
\node[state,fNB,w2h, left=-1 cm] (B) at (18:2) {\rm R({$\Theta$},{$X$})};
% \node[above] at (B.north) {{$\Theta$}};
% Box on the side of q1
\node[state,fNB,wh] (B_side) at (3.8,0.6) {$|0\rangle$};
% % \node[below=0.3cm, align=center, font=\footnotesize] at (B_side.east) {Quantum\\pre-processing};
% Box on top of q1
\node[state, fill=Orange, minimum width=1.5cm, minimum height=0.8cm] (B_top) at (2.2,2.1) {Data: {x}};
% \node[above] at (B_top.east) {}; % ???
% State q2
\node[state,fNB,wh, left=-2.2 cm] (C) at (-32:2)
{
% ~\Qcircuit @C=.4em @R=.3em{
%% \gate{R_y}&\gate{R_z} &\qw &
%% \gate{R_y}&\gate{R_z}
%% \protect\gategroup{1}{1}{1}{2}{0.25em}{--}
%% \protect\gategroup{1}{4}{1}{5}{0.25em}{--}
% }
???};
% {xyz};
% \node[above=0.4cm, right=-0.0 cm] at (C.north west) {Quantum circuit};
% State q3
\node[meter, state,fNB, minimum width=2.cm, minimum height=0.2cm] (D) at (-147:2) {M};
% \node[meter, state, fill=NavyBlue, minimum width=2.cm, minimum height=0.5cm] (meter) at (-138:2) {M};
% \node[above=0.01cm] at (D.north west) {State measurement};
% State q4
\node[state, w2h] (E) at (162:2) {$f(|\langle y | \phi \rangle |^2 )$};
% \node[above=-0.5] at (E.north) {post-processing};
% ~~~ extra labels ~~~~~~~~~~~~~~~~~~~~
\node[lbl,anchor=west] at (B_side.east) {Quantum\\pre-processing};
% ~~~ drawing connections ~~~~~~~~~~~~~~~~~~~~~~~~~
\draw[-stealth] (B_side) -- (B);
\draw[-stealth] (B_top) -- (B);
% Transition q0 to q1
\draw[-stealth] (A) to[bend left=30] node[red,above]{Parameter} (B);
% Transition q1 to q2
\draw[-stealth] (B) to[bend left=15] node[red,right]{$e_1$} (C);
% Transition q2 to q3
\draw[-stealth] (C) to[bend left=15] node[red,right]{$e_2$} (D);
% Transition q3 to q4
\draw[-stealth] (D) to[bend left=15] node[red,below=-0.4 cm, right=0.1 cm]{Quantum state$ |\phi\rangle$} (E);
% Transition q4 to q0
\draw[-stealth] (E) to[bend left=30] node[red,left]{Classical} (A);
\end{tikzpicture}
%
\end{document}
решение3
Вот что я изменил.
%%%%%%%%%%%%%%%%%
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{arrows.meta}
% \usetikzlibrary{quantikz}
\usepackage{qcircuit}
\usepackage[absolute,overlay]{textpos}
\usetikzlibrary{shapes}
\newcommand\rd[0]{32mm} % radius for the circle placement
\begin{document}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Define the measurement symbol style
\tikzset{
meter/.style={
draw,
inner sep=10pt,
rectangle,
font=\vphantom{A},
minimum width=30pt,
minimum height=10pt,
line width=.5pt,
path picture={
\draw[black] ([shift={(2pt,7pt)}]path picture bounding box.south west) to[bend left=50] ([shift={(-2pt,7pt)}]path picture bounding box.south east);
\node[anchor=center] at (path picture bounding box.center) {$M$};
\draw[black,-latex] ([shift={(0pt,3pt)}]path picture bounding box.south) -- ([shift={(10pt,-5pt)}]path picture bounding box.north);
}
}
}
%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%
\begin{tikzpicture}[
geom/.style={
rounded corners,
minimum width=25mm,
minimum height=9mm,
},
state/.style={fill=blue!40!teal!40,geom},
other/.style={fill=orange!40,geom},
txt/.style={align=center,font={\small\sffamily}},
arrlbl/.style={blue,align=center},
]
% Blocks
\node[other] (OP) at ( 90:\rd) {\large Optimizer};
\node[state] (QP) at ( 20:\rd) {$R(\{\vec{\Theta}\},\{\vec{X}\})$};
\node[state] (QC) at ( -30:\rd) {
\resizebox{.45\linewidth}{!}{
\hspace{-.58cm}~\Qcircuit @C=.8em @R=.5em{
\push{\cdots} &\gate{R_y} & \gate{R_z} & \gate{R_y} & \gate{R_z}&\cdots\\
% & & & & \\
% & & & & & \\
\protect\gategroup{1}{2}{1}{3}{0.3em}{--}
\protect\gategroup{1}{4}{1}{5}{0.3em}{--}
}
}
};
\node[meter, state] (QM) at ( 210:\rd) {M};
\node[other] (PP) at ( 160:\rd) {$f(|\langle y | \phi \rangle |^2 )$ };
% ~~~ (1) relative placement of other blocks
% \node[state] (QX) at ([xshift=\rd]QP) {QX}; % before step (5)
\node[rounded corners, fill=blue!40!teal!40] (QX) at ([shift=(0:2)]QP) {$|0\rangle$};
\node[rounded corners, fill=orange!40] (DT) at ([shift=(75:2)]QP) {\large Data: $\{\vec{X\}}$};
% Connections
\draw[->] (OP) to[bend left] node[arrlbl,anchor=west,pos=.8]{} (QP.70);
\draw[->] (QP) to[bend left] node[arrlbl,anchor=west,pos=.8]{} (QC.65);
\draw[->] (QC) to[bend left] node[arrlbl,anchor=west,pos=.8]{} (QM);
\draw[->] (QM) to[bend left] node[arrlbl,anchor=west,pos=.8, black] {Quantum state:\\$|\phi\rangle$} (PP);
\draw[->] (PP) to[bend left] node[arrlbl,anchor=west,pos=.8]{} (OP);
\draw[->] (DT) -- (QP.35);
\draw[->] (QX) -- (QP);
% Extra labels
\node[txt] at ([shift=(-100:-0.8)]QM) {\large Quantum state measurement};
\node[txt] at ([shift=(90:0.7)]PP) {\large Classical post-processing};
\node[txt] at ([shift=( -85:1.0)]QX) {\large Quantum\\pre-processing};
\node[txt] at ([shift=(-100:1.7)]QP) {\large Quantum circuit};
\node[txt] at ([shift=(30:-1.2)]QC) {Layer i};
\node[txt] at ([shift=(150:-1.2)]QC) {Layer i+1};
\node[txt,font = {\large}, red] at ([shift=(128:1.3)]QP) {Parameters:\\$\{\vec\Theta\}$};
\end{tikzpicture}
\end{document}