Let $D$ be a digraph as follows:

I want to compute a longest simple path of it.
For an acyclic digraph, there is a method I can run in Python that returns a longest path, but $D$ is not acyclic.
I could try and compute all its simple paths and then calculate the longest one, but the digraph is too large for that to take a reasonable amount of time. So I was thinking on a different idea:
This digraph is very close to being acyclic; its only issue being the double arrows. Any simple path will traverse each double arrow at most once and thus in a single direction, so I can turn it into an acyclic digraph $D'$ by removing one direction of each double arrow of $D$ and compute a "long" simple path of $D$ by computing the longest path of $D'$ via the algorithm mentioned.
I got one of those by following that process. The computation time seems to be pretty fast too, which is good. The path:
[1-1, 1-2, 1-3, 1-4, 1-6, 1-8, 1-12, 1-13, 1-A3, 2-12, 2-13, 2-14, 2-15, 2-11, 2-B2, 3-4, 3-8, 3-9, 3-11, 3-D, 4-2, 4-9, 4-F, 5-1, 5-2, 5-3, 5-11, 5-10, 5-16, 5-17, 5-18, 5-25, 5-26, 5-I]
It's the green path, and it's not a longest one. I can alter it by going through the red or blue sections for longer paths.
So, to really compute a longest path an approach could be computing a longest path for each of its acyclic subgraphs, which is $2^{28}=268435456$ of them. Taking into account that the computations for each seem to be fast it may be computationally doable. Alternatively, I could compute longest paths for each zone starting in each leftmost vertex (and 2-2 and 3-13) and ending in each rightmost vertex. It looks like a lot less calculations so it may be a better one.
Is there an approach for this case that is even better than that? Like considering the graph is planar or something else.
Edit: Another idea. The digraph has different levels (like, Zone 1 has 5 levels): A total of 21 levels. You cannot decrease levels, so you can only stay in a level or go to a larger level. You usually just go to the next level, excluding the ?1, ?2 and ?3 vertices that allow you to skip ones. So for a long path you want to go through level-preserving arrows as much as possible and you want to avoid as many of the the ?1, ?2, ?3 vertices as possible.

The algorithm you mentioned allows you to assign weights to the edges, and can find the maximum weight path. You can modify your directed graph to get an acyclic directed weighted graph, such that the largest-weight path for the latter gives a longest path for the former.
Here is how you do the modification. For each pair of vertices $v_1$ and $v_2$ connected by a two-way edge, do the following:
Delete the two-way edge connecting $v_1$ and $v_2$.
For each vertex $w$ such that $w\to v_1$ but $w\not\to v_2$, add an edge with weight two $w\implies v_2$. We need to do this because it was possible to move from $w$ to $v_2$ in the original graph in two steps using the removed two-way edge.
For each vertex $w$ such that $w\not\to v_1$ but $w\to v_1$, add an edge with weight two $w\implies v_1$.
For each vertex $u$ such that $ v_1\to u$ but $ v_2\not\to u$, add an edge with weight two $v_2\implies u$.
For each vertex $u$ such that $ v_1\not\to u$ but $ v_2\to u$, add an edge with weight two $v_1\implies u$.
Since no two-way edges remain, the new graph is acyclic. The added edges with weight two ensure the graph has the same paths as before. Therefore, you can use the weighted acyclic algorithm, and get a solution to the original problem.
For example, in Zone 1, looking at the two-way edge between vertices 4 and 6, you would make the following modifications:
Delete the $4\longleftrightarrow6$ edge.
Add in the weight two edges $3\implies 6$, $4\implies 10$, $4\implies 12$, $6\implies 9$.