向 tikzpicture 添加复杂箭头

向 tikzpicture 添加复杂箭头

我希望在 tikz 中重现下图(来源:Matlab):
在此处输入图片描述
到目前为止,我已经设法想出了主要节点,尽管我在添加箭头方面遇到了困难。下面是我在阅读解决方案后设法想出的 MWETikz 流程图着色

\documentclass[tikz,multi,border=10pt]{standalone}
\usetikzlibrary{shadows,arrows.meta,positioning,backgrounds,fit,chains,scopes}

% Define block styles
\tikzset{%
    materia/.style={draw, fill=blue!20, text width=6.0em, text centered, minimum height=1.5em,drop shadow},
    etape/.style={materia, text width=8em, minimum width=10em, minimum height=3em, rounded corners, drop shadow},
    linepart/.style={draw, thick, color=black!50, -LaTeX, thick},
    line/.style={draw, thick, color=black!50, -LaTeX},
    ur/.style={draw, text centered, minimum height=0.01em},
    back group/.style={fill=yellow!20,rounded corners, draw=black!50, thick, inner xsep=15pt, inner ysep=10pt},
}

\newcommand{\transreceptor}[3]{%
    \path [linepart] (#1.east) -- node [above] {\scriptsize #2} (#3);}

\begin{document}
    \begin{tikzpicture}
        [
        start chain=p going above,
        every on chain/.append style={etape},
        every join/.append style={line},
        node distance=1 and -.25,
        ]
        {
            \node [on chain] {\textbf{ENVIRONMENT}};
            \node [on chain, join] {REINFORCEMENT LEARNING ALGORITHM};
            \node [on chain, join] {POLICY};
        }
        
        \begin{scope}[on background layer]
            \node (bk1) [back group] [fit=(p-2) (p-3)] {};
        \end{scope}
        
        \path (bk1.east)+(+6.0,0) node (ur1)[ur] {};
        \transreceptor{bk1}{Action $A_t$}{ur1};
    \end{tikzpicture}
\end{document}

MWE 正在生成以下输出:
在此处输入图片描述

答案1

在此处输入图片描述

\documentclass[tikz, margin=10pt]{standalone}
\usetikzlibrary{arrows.meta,
                backgrounds,
                chains,
                ext.paths.ortho,
                fit,
                positioning,
                quotes,
                scopes, shadows}

% Define block styles
\tikzset{%
    arr/.style = {-Latex},
    box/.style = {draw=#1, rounded corners, fill=#1!30,
                  minimum width=11em, minimum height=3em, 
                  text width=\pgfkeysvalueof{/pgf/minimum width}-2*\pgfkeysvalueof{/pgf/inner xsep},
                  align=flush center,
                  on chain, 
                  drop shadow},
    box/.default = orange,
    dot/.style = {circle, fill, inner sep=2pt, node contents={}},
    every join/.style = {arr},
    FIT/.style = {draw=blue, thick, rounded corners, fill=blue!30,
                  inner sep=5 mm, yshift=2mm,
                  fit=#1},
    lbl/.style = {font=\footnotesize\linespread{0,84}\selectfont, align=center}
}
\begin{document}
    \begin{tikzpicture}[
node distance = 1 and 0.5,
  start chain = p going above,
                        ]
\node [box=blue]  {\textbf{ENVIRONMENT}};
\node [box, join] {REINFORCEMENT LEARNING ALGORITHM};
\node [box, join] {POLICY};

\node (d1) [dot, left=of p-3.west];
\node (d2) [dot,right=of p-3.east];

\scoped[on background layer]
    \node (bk1) [FIT=(d1) (d2) (p-2) (p-3),
                 label={[font=\bfseries,anchor=north]north:AGENT}] {};

\coordinate (a1) at (p-3 -| bk1.west);
\coordinate (a2) at (p-3 -| bk1.east);
    \begin{scope}[arr]
\draw (a1)  -- (p-3);
\draw (p-3) -- (a2);
\draw (d1)  |- (p-2);
\draw (d2)  |- (p-2);
%
\draw (p-1) -- (bk1);
\draw[arr] (p-1.west)  -|- [distance=37mm] (a1) node[lbl, pos=0.88, below] {OBSERVATION\\$Q_t$};
\draw[arr] (a2)  -|- [distance=-27mm] (p-1.east) node[lbl, pos=0.12, below] {ACTION\\$Q_t$};
    \end{scope}
\path (p-1) -- node[lbl, right] {REVARD\\ $R_t$} (bk1);
    \end{tikzpicture}
\end{document}

相关内容