Как нарисовать циклический график

Как нарисовать циклический график

У меня есть следующий текстовый код

 \documentclass{minimal}
 \usepackage{tikz}
 \usetikzlibrary{arrows,positioning} 
 \tikzset{
    %Define standard arrow tip
     >=stealth',
    %Define style for boxes
    punkt/.style={
       rectangle,
       rounded corners,
       draw=black, very thick,
       text width=6.5em,
       minimum height=2em,
       text centered},
% Define arrow style
pil/.style={
       ->,
       thick,
       shorten <=2pt,
       shorten >=2pt,}
}

\begin{document}
  \begin{tikzpicture}[node distance=1cm, auto,]
    %nodes
    \node[punkt] (agent) {Agent};
    \node[below=of agent] (dummy) {};
    \node[left=2.0 of dummy] (state) {$X_t$}
        edge[pil, bend left=45] (agent.west);
    \node[left=3.0 of dummy] (reward) {$R_t$}
        edge[pil, bend left=45] (agent.west);
    \node[punkt, inner sep=5pt,below=1.0cm of dummy]
        (environment) {Environment};
    \draw (environment.west) edge[pil, bend left=45] (state.south)                
                       edge[pil, bend left=45] (reward.south);
    % We make a dummy figure to make everything look nice.
    \node[right=2.0cm of dummy] (action) {$A_t$}
        edge[pil,bend right=45] (agent.east)
        edge[pil, bend left=45] (environment.east); % .east since we want
                                         % consistent 
\end{tikzpicture}
\end{document}

Я хотел бы

  • для подключения агента к действию
  • чтобы начать ребра от середины левой стороны узла окружения (уже исправлено благодаря @marsupilam)

решение1

Шаги следующие:

  1. определить требуемые узлы
  2. нарисуйте грани между ними.

Звучит весьма логично, не правда ли?

Выход

введите описание изображения здесь

Код

\documentclass[tikz]{standalone}
\usetikzlibrary{calc,positioning,arrows}
\begin{document}
\tikzset
{
  punkt/.style =
  {
    circle,
    draw,
  },
  pil/.style = 
  {
    red,
    -stealth',
    bend left=45,
  },
}
\begin{tikzpicture}[node distance=1cm, auto,]
  %nodes
  \node[punkt] (agent) {Agent};
  \node[below=of agent] (dummy) {};
  \node[left=2.0 of dummy] (state) {$X_t$} ;
  \node[left=3.0 of dummy] (reward) {$R_t$} ;
  \node[punkt, inner sep=5pt,below=1.0cm of dummy] (environment) {Environment}; 
  \node[right=2.0cm of dummy] (action) {$A_t$} ;

  % edges
  \path[every edge/.append style={pil}] 
  (environment.west) edge (state.south)                
                     edge (reward.south)
  (agent.east)       edge (action)  
  (action)           edge (environment.east)
  (state)            edge (agent.west)
  (reward)           edge (agent.west);
\end{tikzpicture}
\end{document}

решение2

введите описание изображения здесь

На основе комбинации заданного MWE имарсупиламответ, но со следующими изменениями:

  • другой подход к позиционированию узлов, используются только предопределенные расстояния между узлами
  • для краев используются arrow.metaбиблиотеки bendingи их стиль дал некоторые мои личные штрихи (могут быть легко изменены в соответствии с вашими)
  • упрощенный код для рисования рёбер

Эти изменения приводят к немного более краткому MWE:

\documentclass[tikz, margin=3mm]{standalone}
\usetikzlibrary{arrows.meta, bending, positioning}

\begin{document}

    \begin{tikzpicture}[
every node/.append style = {inner sep=1.5pt}, 
node distance = 12mm and 9mm,
 punkt/.style = {circle, draw, very thick},
   pil/.style = {line width=1mm, red, -{Stealth[length=4mm,bend]},
                 shorten >=1pt, shorten <=2pt, bend left=#1},
 pil/.default = 30
                    ]
%nodes
\node (reward)                                  {$R_t$} ;
\node (state)   [right=of reward]               {$X_t$} ;
\node (env)     [punkt,
                 below right=of state]          {Environment};
\node (action)  [above right=of env]            {$A_t$} ;
%
\node (agent)   [punkt, 
                 above=of state.north -| env]   {Agent};
% edges
\draw[pil]  (agent)     edge    (action)
            (action)    edge    (env)
            (env)       edge    (state)
            (env)       edge[pil=40]    (reward)
            (state)     edge    (agent)
            (reward)    edge[pil=40]    (agent);
\end{tikzpicture}
\end{document}

Связанный контент