\documentclass[tikz, border=1cm]{standalone}
\usepackage{tikz}
\usetikzlibrary{bayesnet}
\begin{document}
\tikzstyle{emptynode} = [rectangle, draw=black!0, minimum size=3mm]
\tikzstyle{rect} = [rectangle, draw=black!90, minimum size=3mm]
\tikzstyle{diam} = [diamond, draw=black!90, minimum width=1.5mm, minimum height = 1.5mm]
\begin{tikzpicture}
\node[latent] (s0) {$s_0$};
\node[latent, right= 2.4cm of s0](s1){$s_1$};
\node[latent, right= 2.4cm of s1](s2){$s_2$};
\node[obs, below= 2cm of s0](x0){$s_0$};
\node[obs, below= 2cm of s1](x1){$s_1$};
\node[obs, below= 2cm of s2](x2){$s_2$};
\node[latent, below= 1cm of x0](b0){$b_0$};
\node[latent, below= 1cm of x1](b1){$b_1$};
\node[latent, below= 1cm of x2](b2){$b_2$};
\node[rect, right = 0.8cm of x0](a0){$a_0$};
\node[rect, right = 0.8cm of x1](a1){$a_1$};
\node[diam, above = 0.6 of a0](r0){$r_0$};
\node[diam, above = 0.6 of a1](r1){$r_1$};
\node[emptynode, right= 2cm of s2](e1){$\cdots$};
\node[emptynode, right= 2cm of b2](e2){$\cdots$};
\edge{s0}{x0,r0};
\edge{x0}{b0};
\edge{b0}{b1,a0};
\edge{b1}{b2};
\edge{a0}{r0,s1};
\edge{s1}{r1, x1};
\edge{b1}{b2, a1};
\edge{s2}{x2};
\edge{x2,r1,a1}{b2};
\edge{a1}{r1,s2};
\edge{a0,r0,x1}{b1};
\edge{b2}{e2};
\node[draw=black,thin,fit=(s0)(s1)(s2), rectangle,inner sep=10pt](rect1) {};
\node[const, above = 2.9cm of a1](){environment};
\node[draw=black,thin,fit=(b0)(b1)(b2), rectangle,inner sep=10pt](rect1) {};
\node[const, below = 1.9cm of a1](){agent};
\end{tikzpicture}
\end{document}