{"id":1981,"date":"2025-02-21T07:02:30","date_gmt":"2025-02-21T07:02:30","guid":{"rendered":"https:\/\/mailitics.com\/index.php\/2025\/02\/21\/reinforcement-learning-with-pdes\/"},"modified":"2025-02-21T07:02:30","modified_gmt":"2025-02-21T07:02:30","slug":"reinforcement-learning-with-pdes","status":"publish","type":"post","link":"https:\/\/mailitics.com\/index.php\/2025\/02\/21\/reinforcement-learning-with-pdes\/","title":{"rendered":"Reinforcement Learning with PDEs"},"content":{"rendered":"<p>    Reinforcement Learning with PDEs<br \/>\n \t<BR><br \/>\n<BR><\/BR><br \/>\n    <!-- no image --><br \/>\n \t<BR><br \/>\n<BR><\/BR><\/p>\n<div>\n<p class=\"wp-block-paragraph\">Previously we discussed applying reinforcement learning to Ordinary Differential Equations (ODEs) by integrating ODEs within gymnasium. ODEs are a powerful tool that can describe a wide range of systems but are limited to a single variable. Partial Differential Equations (PDEs) are differential equations involving derivatives of multiple variables that can cover a far broader range and more complex systems. Often, ODEs are special cases or special assumptions applied to PDEs.<\/p>\n<p class=\"wp-block-paragraph\">PDEs include Maxwell\u2019s Equations (governing electricity and magnetism), Navier-Stokes equations (governing fluid flow for aircraft, engines, blood, and other cases), and the Boltzman equation for thermodynamics. PDEs can describe systems such as<a href=\"https:\/\/www.sciencedirect.com\/science\/article\/pii\/0022247X85900435\"> flexible structures<\/a>,<a href=\"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/337292.337359\"> power grids<\/a>,<a href=\"https:\/\/ieeexplore.ieee.org\/document\/4392493\"> manufacturing<\/a>, or<a href=\"https:\/\/arxiv.org\/html\/2405.12938v3\"> epidemiological<\/a> models in biology. They can represent highly complex behavior; the Navier Stokes equations describe the eddies of a rushing mountain stream. Their capacity for capturing and revealing more complex behavior of real-world systems makes these equations an important topic for study, both in terms of describing systems and analyzing known equations to make new discoveries about systems. Entire fields (like fluid dynamics, electrodynamics, structural mechanics) can be devoted to study of just a single set of PDEs.<\/p>\n<p class=\"wp-block-paragraph\">This increased complexity comes with a cost; the systems captured by PDEs are much more difficult to analyze and control. ODEs are also described as lumped-parameter systems, the various parameters and variables that describe them are \u201clumped\u201d into a discrete point (or small number of points for a coupled system of ODEs). PDEs are distributed parameter systems that track behavior throughout space and time. In other words, the state space for an ODE is a relatively small number of variables, such as time and a few system measurements at a specific point. For PDE\/distributed parameter systems, the state space size can approach infinite dimensions, or discretized for computation into millions of points <em>for each time step<\/em>.\u00a0A lumped parameter system controls the temperature of an engine based on a small number of sensors. A PDE\/distributed parameter system would manage temperature dynamics across the entire engine.\u00a0<\/p>\n<p class=\"wp-block-paragraph\">As with ODEs, many PDEs must be analyzed (aside from special cases) through modelling and simulation. However, due to the higher dimensions, this modelling becomes far more complex. Many ODEs can be solved through straightforward applications of algorithms like MATLAB\u2019s ODE45 or SciPy\u2019s <code>solve_ivp<\/code>.\u00a0PDEs are modelled across grids or meshes where the PDE is simplified to an algebraic equation (such as through Taylor Series expansion) at each point on the grid. Grid generation is a field, a science and art, on its own and ideal (or usable) grids can vary greatly based on problem geometry and <a href=\"https:\/\/towardsdatascience.com\/tag\/physics\/\" title=\"Physics\">Physics<\/a>. Grids (and hence problem state spaces) can number in the millions of points with computation time running in days or weeks, and PDE solvers are often commercial software costing tens of thousands of dollars.\u00a0<\/p>\n<p class=\"wp-block-paragraph\">Controlling PDEs presents a far greater challenge than ODEs. The Laplace transform that forms the basis of much classical control theory is a one-dimensional transformation. While there has been some progress in PDE control theory, the field is not as comprehensive as for ODE\/lumped systems. For PDEs, even basic controllability or observability assessments become difficult as the state space to assess increases by orders of magnitude and fewer PDEs have analytic solutions. By necessity, we run into design questions such as what part of the domain needs to be controlled or observed? Can the rest of the domain be in an arbitrary state?\u00a0What subset of the domain does the controller need to operate over? With key tools in control theory underdeveloped, and new problems presented, applying machine learning has been a major area of research for understanding and controlling PDE systems.\u00a0<\/p>\n<p class=\"wp-block-paragraph\">Given the importance of PDEs, there has been research into developing control strategies for them. For example, <a href=\"https:\/\/www.amazon.com\/Approximate-Controllability-Distributed-Parameter-Systems\/dp\/0521885728\/ref=sr_1_1?crid=3FGUZ2CQYKGYQ&amp;dib=eyJ2IjoiMSJ9.-oRlRZ73sDSnpAcPPbERrs7CUlG0Gr_Aw0V_JYBKkmc.ur8hTlYbid8e3MzQG0RdztW3vwTamw8QFtzQtDCbwHQ&amp;dib_tag=se&amp;keywords=analysis+and+control+of+distributed+parameter+systems+Glowinski&amp;qid=1739749882&amp;sprefix=analysis+and+control+of+distributed+parameter+systems+glowinski+%2Caps%2C88&amp;sr=8-1\">Glowinski et. all<\/a> developed an analytical adjoint based method from advanced functional analysis relying on simulation of the system. Other approaches, such as discussed by <a href=\"https:\/\/uwaterloo.ca\/applied-mathematics\/sites\/default\/files\/uploads\/documents\/morris_controlhandbook.pdf\">Kirsten Morris<\/a>, apply estimations to reduce the order of the PDE to facilitate more traditional control approaches.\u00a0<a href=\"https:\/\/arxiv.org\/abs\/2403.15267\">Botteghi and Fasel<\/a>, have begun to apply machine learning to control of these systems (note, this is only a VERY BRIEF glimpse of the research). Here we will apply reinforcement learning on two PDE control problems. The diffusion equation is a simple, linear, second order PDE with known analytic solution. The Kuramoto\u2013Sivashinsky (K-S) equation is a much more complex 4<sup>th<\/sup> order nonlinear equation that models instabilities in a flame front.\u00a0<\/p>\n<p class=\"wp-block-paragraph\">For both these equations we use a simple, small square domain of grid points. We target a sinusoidal pattern in a target area of a line down the middle of the domain by controlling input along left and right sides. Input parameters for the controls are the values at the target region and the <code>{x,y}<\/code> coordinates of the input control points. Training the algorithm required modelling the system development through time with the control inputs. As discussed above, this requires a grid where the equation is solved at each point then iterated through each time step. I used the <a href=\"https:\/\/github.com\/zwicker-group\/py-pde\">py-pde package<\/a> to create a training environment for the reinforcement learner (thanks to the developer of this package for his prompt feedback and help!). With the <code>py-pde<\/code> environment, approach proceeded as usual with reinforcement learning:\u00a0the particular algorithm develops a guess at a controller strategy. That controller strategy is applied at small, discrete time steps and provides control inputs based on the current state of the system that lead to some reward (in this case, root mean square difference between target and current distribution).\u00a0<\/p>\n<p class=\"wp-block-paragraph\">Unlike previous cases, I only present results from the <a href=\"https:\/\/towardsdatascience.com\/rl-for-physical-dynamical-systems-an-alternative-approach-8e2269dc1e79\/\">genetic-programming<\/a> controller. I developed code to apply a soft actor critic (SAC) algorithm to execute <a href=\"https:\/\/github.com\/retter-berkeley\/DockerPDE_SAC\">as a container on AWS Sagemaker<\/a>. However, full execution would take about 50 hours and I didn\u2019t want to spend the money! I looked for ways to reduce the computation time, but eventually gave up due to time constraints; this article was already taking long enough to get out with my job, military reserve duty, family visits over the holidays, civic and church involvement, and not leaving my wife to take care of our baby boy alone!<\/p>\n<p class=\"wp-block-paragraph\">\u00a0First we will discuss the diffusion equation:<\/p>\n<figure class=\"wp-block-image aligncenter\"><img decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXfecZdrx0gLWJALXEqkJdv0khByvS6c6FBrVH4qnsMHqQA-JlI1H0zzl9AJfKxLo6Sd_HIQ40OdR3KLPYfUatBCW2Q17av9BzDnW4kGEbxJt2DMGpOyJ-e-Y20WHnd1zYumL7uX?key=JbKi7eT9L53fmu0C-uu-pl3H\" alt=\"\"><\/figure>\n<p class=\"wp-block-paragraph\">with x as a two dimensional cartesian vector and \u2206 <span style=\"font-size: revert; color: var(--wp--custom--color--text--primary); background-color: var(--wp--preset--color--surface-primary);\">the <\/span><a style=\"font-size: revert; background-color: var(--wp--preset--color--surface-primary);\" href=\"https:\/\/en.wikipedia.org\/wiki\/Laplace_operator\">Laplace operator<\/a><span style=\"font-size: revert; color: var(--wp--custom--color--text--primary); background-color: var(--wp--preset--color--surface-primary);\">. As mentioned, this is a simple second order (second derivative) linear partial differential equation in time and two dimensional space. Mu is the diffusion coefficient which determines how fast effects travel through the system. The diffusion equation tends to wash-out (diffuse!) effects on the boundaries throughout the domain and exhibits stable dynamics. The PDE is implemented as shown below with grid, equation, boundary conditions, initial conditions, and target distribution:<\/span><\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-python\">from pde import Diffusion, CartesianGrid, ScalarField, DiffusionPDE, pde\ngrid = pde.CartesianGrid([[0, 1], [0, 1]], [20, 20], periodic=[False, True])\nstate = ScalarField.random_uniform(grid, 0.0, 0.2)\nbc_left={\"value\": 0}\nbc_right={\"value\": 0}\nbc_x=[bc_left, bc_right]\nbc_y=\"periodic\"\n#bc_x=\"periodic\"\neq = DiffusionPDE(diffusivity=.1, bc=[bc_x, bc_y])\nsolver=pde.ExplicitSolver(eq, scheme=\"euler\", adaptive = True)\n#result = eq.solve(state, t_range=dt, adaptive=True, tracker=None)\nstepper=solver.make_stepper(state, dt=1e-3)\ntarget = 1.*np.sin(2*grid.axes_coords[1]*3.14159265)<\/code><\/pre>\n<p class=\"wp-block-paragraph\">The problem is sensitive to diffusion coefficient and domain size; mismatch between these two results in washing out control inputs before they can reach the target region unless calculated over a long simulation time. The control input was updated and reward evaluated every 0.1 timestep up to an end time of T=15.\u00a0<\/p>\n<p class=\"wp-block-paragraph\">Due to py-pde package architecture, the control is applied to one column inside the boundary. Structuring the py-pde package to execute with the boundary condition updated each time step resulted in a memory leak, and the py-pde developer advised using a stepper function as a work-around that doesn\u2019t allow updating the boundary condition. This means the results aren\u2019t exactly physical, but do display the basic principle of PDE control with reinforcement learning.\u00a0<\/p>\n<p class=\"wp-block-paragraph\">The GP algorithm was able to arrive at a final reward (sum mean square error of all 20 points in the central column) of about 2.0 after about 30 iterations with a 500 tree forest. The results are shown below as target and achieved distributed in the target region.<\/p>\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" data-dominant-color=\"fbfafa\" data-has-transparency=\"true\" style=\"--dominant-color: #fbfafa;\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"630\" src=\"https:\/\/i0.wp.com\/towardsdatascience.com\/wp-content\/uploads\/2025\/02\/Screenshot-2025-02-20-at-2.22.46%25E2%2580%25AFPM-1024x630.png?resize=1024%2C630&#038;ssl=1\" alt=\"\" class=\"wp-image-598236 has-transparency\" srcset=\"https:\/\/towardsdatascience.com\/wp-content\/uploads\/2025\/02\/Screenshot-2025-02-20-at-2.22.46\u202fPM-1024x630.png 1024w, https:\/\/towardsdatascience.com\/wp-content\/uploads\/2025\/02\/Screenshot-2025-02-20-at-2.22.46\u202fPM-300x185.png 300w, https:\/\/towardsdatascience.com\/wp-content\/uploads\/2025\/02\/Screenshot-2025-02-20-at-2.22.46\u202fPM-768x473.png 768w, https:\/\/towardsdatascience.com\/wp-content\/uploads\/2025\/02\/Screenshot-2025-02-20-at-2.22.46\u202fPM.png 1472w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\"><figcaption class=\"wp-element-caption\">Figure 1:\u00a0Diffusion equation, green target distribution, red achieved.\u00a0Provided by author.<\/figcaption><\/figure>\n<p class=\"wp-block-paragraph\">Now the more interesting and complex K-S equation:<\/p>\n<figure class=\"wp-block-image aligncenter\"><img decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXdf24i5jwGnrlFJc3Sgtz_xzyRVKa8ldViNaXyKEoMDhJoM4Nl_IrTAKJxa-FYFeskl3DEYaeZ4_tUt6l3nJOXTgNVH-gNafQEgX1v6HOO88kUKGFmieoq2JgtHQWwVwW708KPF-Q?key=JbKi7eT9L53fmu0C-uu-pl3H\" alt=\"\"><\/figure>\n<p class=\"wp-block-paragraph\">Unlike the diffusion equation, the K-S equation displays rich dynamics (as befitting an equation describing flame behavior!). Solutions may include stable equilibria or travelling waves, but with increasing domain size all solutions will eventually become chaotic. The PDE implementation is given by below code:<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-python\">grid = pde.CartesianGrid([[0, 10], [0, 10]], [20, 20], periodic=[True, True])\nstate = ScalarField.random_uniform(grid, 0.0, 0.5)\nbc_y=\"periodic\"\nbc_x=\"periodic\"\neq = PDE({\"u\": \"-gradient_squared(u) \/ 2 - laplace(u + laplace(u))\"}, bc=[bc_x, bc_y])\nsolver=pde.ExplicitSolver(eq, scheme=\"euler\", adaptive = True)\nstepper=solver.make_stepper(state, dt=1e-3)\ntarget=1.*np.sin(0.25*grid.axes_coords[1]*3.14159265)<\/code><\/pre>\n<p class=\"wp-block-paragraph\">Control inputs are capped at +\/-5.\u00a0The K-S equation is naturally unstable; if any point in the domain exceeds +\/- 30 the iteration terminates with a large negative reward for causing the system to diverge. Experiments with the K-S equation in <code>py-pde<\/code> revealed strong sensitivity to domain size and number of grid points. The equation was run for T=35, both with control and reward update at dt=0.1.<\/p>\n<p class=\"wp-block-paragraph\">For each, the GP algorithm had more trouble arriving at a solution than in the diffusion equation. I chose to manually stop execution when the solution became visually close; again, we are looking for general principles here. For the more complex system, the controller works better\u2014likely because of how dynamic the K-S equation is the controller is able to have a bigger impact. However, when evaluating the solution for different run times, I found it was not stable; the algorithm learned to arrive at the target distribution at a particular time, not to stabilize at that solution. The algorithm converged to the below solution, but, as the successive time steps show, the solution is unstable and begins to diverge with increasing time steps.\u00a0<\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXeZCZwd8e1JEeueP-bwT4Ye_1cihVW_TkNBgBwrulaCjdMvMCz7zPi9mWREF8hM05oUs3JD9exDg4FDvujZsmxDwNLUlguMzGC87wCJjehkRpihtk6QyKMGIcY1fM0ufmaCEbmFFg?key=JbKi7eT9L53fmu0C-uu-pl3H\" alt=\"\"><figcaption class=\"wp-element-caption\">Figure 2: K-S equation Green target; yellow, red, magenta, cyan, blue for T = 10, 20, 30, 40.\u00a0Provided by author.<\/figcaption><\/figure>\n<p class=\"wp-block-paragraph\">Careful tuning on the reward function would help obtain a solution that would hold longer, reinforcing how vital correct reward function is. Also, in all these cases we aren\u2019t coming to perfect solutions; but, especially for the K-S equations we are getting decent solutions with comparatively little effort compared to non-RL approaches for tackling these sorts of problems.<\/p>\n<p class=\"wp-block-paragraph\">The GP solution is taking longer to solve with more complex problems and has trouble handling large input variable sets. To use larger input sets, the equations it generates become longer which make it less interpretable and slower to compute.\u00a0Solution equations had scores of terms rather than the dozen or so in ODE systems. Neural network approaches can handle large input variable sets more easily as input variables only directly impact the size of the input layer.\u00a0Further, I suspect that neural networks will be able to handle more complex and larger problems better for reasons discussed previously in previous posts. Because of that, I did develop <a href=\"https:\/\/github.com\/retter-berkeley\/PhysicsGyms\">gymnasiums for py-pde diffusion<\/a>, which can easily be adapted to other PDEs per the <a href=\"https:\/\/py-pde.readthedocs.io\/en\/latest\/\">py-pde documentation<\/a>. These gymnasiums can be used with different NN-based reinforcement learning such as the SAC algorithm I developed (which, as discussed, runs but takes time).\u00a0<\/p>\n<p class=\"wp-block-paragraph\">Adjustments could also be made to the genetic <a href=\"https:\/\/towardsdatascience.com\/tag\/programming\/\" title=\"Programming\">Programming<\/a> approach. For example, vector representation of inputs could reduce size of solution equations. Duriez et al.<sup data-fn=\"5b841bb3-ec67-4920-8c4a-f8808ba2f2b8\" class=\"fn\"><a id=\"5b841bb3-ec67-4920-8c4a-f8808ba2f2b8-link\" href=\"https:\/\/towardsdatascience.com\/#5b841bb3-ec67-4920-8c4a-f8808ba2f2b8\">1<\/a><\/sup> all proposes using Laplace transform to introduce derivatives and integrals into the genetic programming equations, broadening the function spaces they can explore.\u00a0<\/p>\n<p class=\"wp-block-paragraph\">The ability to tackle more complex problems is important. As discussed above, PDEs can describe a wide range of complex phenomena. Currently, controlling these systems usually means lumping parameters. Doing so leaves out dynamics and so we end up working against such systems rather than with them. Efforts to control or manage these means higher control effort, missed efficiencies, and increased risk of failure (small or catastrophic). Better understanding and control alternatives for PDE systems could unlock major gains in engineering fields where marginal improvements have been the standard such as <a href=\"https:\/\/www.researchgate.net\/publication\/316088790_MODELLING_VEHICLE_TRAFFIC_FLOW_WITH_PARTIAL_DIFFERENTIAL_EQUATIONS\">traffic<\/a>,<a href=\"https:\/\/www.tandfonline.com\/doi\/full\/10.1080\/21642583.2015.1033565\"> supply chains<\/a>, and <a href=\"https:\/\/en.wikipedia.org\/wiki\/Magnetohydrodynamics\">nuclear fusion<\/a> as these systems behave as high dimensional distributed parameter systems. They are highly complex with nonlinear and emergent phenomena but have large available data sets\u2014ideal for machine learning to move past current barriers in understanding and optimization.\u00a0<\/p>\n<p class=\"wp-block-paragraph\">For now, I have only taken a very basic look at applying ML to controlling PDEs. Follow ons to the control problem include not just different systems, but optimizing where in the domain the control is applied, experimenting with reduced-order observation space, and optimizing the control for simplicity or control effort. In addition to improved control efficiency, as discussed in Brunton and Kutz<sup data-fn=\"a6a012fd-13b2-47c5-989b-21c56c37f554\" class=\"fn\"><a id=\"a6a012fd-13b2-47c5-989b-21c56c37f554-link\" href=\"https:\/\/towardsdatascience.com\/#a6a012fd-13b2-47c5-989b-21c56c37f554\">2<\/a><\/sup>, machine learning can also be used to derive data-based models of complex physical systems and to determine reduced order models which reduce state space size and may be more amenable to analysis and control, by traditional or machine learning methods. Machine learning and PDEs is an exciting area of research, and I encourage you to see what the professionals are doing!<\/p>\n<ol class=\"wp-block-footnotes\">\n<li id=\"5b841bb3-ec67-4920-8c4a-f8808ba2f2b8\">Duriez, Thomas., Steven L Brunton, and Bernd R. Noack. <em>Machine Learning Control\u2013Taming Nonlinear Dynamics and Turbulence.<\/em> <a href=\"https:\/\/towardsdatascience.com\/#5b841bb3-ec67-4920-8c4a-f8808ba2f2b8-link\" aria-label=\"Jump to footnote reference 1\"><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/s.w.org\/images\/core\/emoji\/15.0.3\/72x72\/21a9.png?ssl=1\" alt=\"\u21a9\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\">\ufe0e<\/a>\n<\/li>\n<li id=\"a6a012fd-13b2-47c5-989b-21c56c37f554\">Brunton, Steven., and J. Nathan Kutz.\u00a0<em>Data Driven Science and Engineering<\/em>. <a href=\"https:\/\/towardsdatascience.com\/#a6a012fd-13b2-47c5-989b-21c56c37f554-link\" aria-label=\"Jump to footnote reference 2\"><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/s.w.org\/images\/core\/emoji\/15.0.3\/72x72\/21a9.png?ssl=1\" alt=\"\u21a9\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\">\ufe0e<\/a>\n<\/li>\n<\/ol>\n<p>The post <a href=\"https:\/\/towardsdatascience.com\/reinforcement-learning-with-pdes\/\">Reinforcement Learning with PDEs<\/a> appeared first on <a href=\"https:\/\/towardsdatascience.com\/\">Towards Data Science<\/a>.<\/p>\n<\/div>\n<p> \t<BR><br \/>\n <BR><\/BR><br \/>\n    Robert Etter<br \/>\n \t<BR><br \/>\n<BR><\/BR><br \/>\n<a href=\"https:\/\/towardsdatascience.com\/reinforcement-learning-with-pdes\/\">Go to original source<\/a><br \/>\n \t<BR><br \/>\n <BR><\/BR><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Reinforcement Learning with PDEs Previously we discussed applying reinforcement learning to Ordinary Differential Equations (ODEs) by integrating ODEs within gymnasium. ODEs are a powerful tool that can describe a wide range of systems but are limited to a single variable. Partial Differential Equations (PDEs) are differential equations involving derivatives of multiple variables that can cover [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[62,70,229,1817,1121,160,1787],"tags":[1819,1818,492],"class_list":["post-1981","post","type-post","status-publish","format-standard","hentry","category-aimldsaimlds","category-machine-learning","category-math","category-pde","category-physics","category-programming","category-reinforcemect-learning","tag-equations","tag-pdes","tag-systems"],"_links":{"self":[{"href":"https:\/\/mailitics.com\/index.php\/wp-json\/wp\/v2\/posts\/1981"}],"collection":[{"href":"https:\/\/mailitics.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mailitics.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mailitics.com\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/mailitics.com\/index.php\/wp-json\/wp\/v2\/comments?post=1981"}],"version-history":[{"count":0,"href":"https:\/\/mailitics.com\/index.php\/wp-json\/wp\/v2\/posts\/1981\/revisions"}],"wp:attachment":[{"href":"https:\/\/mailitics.com\/index.php\/wp-json\/wp\/v2\/media?parent=1981"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mailitics.com\/index.php\/wp-json\/wp\/v2\/categories?post=1981"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mailitics.com\/index.php\/wp-json\/wp\/v2\/tags?post=1981"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}