I don't know of any algorithm that will work for all $a,b$, because of the possibility that you might have to use an intermediate value that is extremely large, and I'm not aware of any reasonable bound on how large of an intermediate value you need to contemplate.
However, here's one heuristic. Suppose we only consider sequences where no intermediate value exceeds some constant $K$. Then you can use dynamic programming to determine whether it's possible to go from $a$ to $b$, without ever exceeding $K$. You build an array $A[1..K]$ where $A[i]=1$ means that it's possible to reach $i$ from $a$, and fill it in via a fixed point computation, as follows:
- Set $A[a]=1$ and $A[i]=0$ for all $i \ne a$.
- Repeatedly do the following, until you do an entire iteration without changing the array:
- For each $i := 1,2,\dots,K/3$, if $A[i]=1$, set $A[3i] := 1$.
- For each $i := 3,4,\dots,K$, if $A[i]=1$, set $A[\lfloor i/2 \rfloor] := 1$.
Finally, if $A[b]=1$, you know it's possible to go from $a$ to $b$. (If $A[b]=0$, you can conclude nothing; maybe there's a way to get from $a$ to $b$ by going through some intermediate value larger than $K$.)