The problem of enumerating all vertices of a polytope has been studied, see for example Generating All Vertices of a Polyhedron Is Hard by Khachiyan, Boros, Borys, Elbassioni & Gurvich (available free online at Springer's website) and A Survey and Comparison of Methods for Finding All Vertices of Convex Polyhedral Sets by T. H. Matheiss and D. S. Rubin. That's a pretty old survey though (1980), so newer methods may be available.
A naive brute force approach can be deduced from the definition of vertex/extreme point. Let's call the polytope $P$. Pseudocode can be as follows:
Select a subset of $n$ inequalities (in you example $n = 3$), getting a smaller linear system of inequalities with submatrix $A'$ and vector $b'$.
Solve the linear system $A'x = b'$. There are three cases here:
a. The system has no solution: Then, return to (1) and select another subset (not chosen before).
b. The system has no unique solution: Then, $A'$ is linearly dependent. Return to (1) and select a new subset.
c. The system has a unique solution: If that solution is feasible for $P$, then it's a vertex. Go back to (1).
The algorithm ends when no new subsets can be chosen. Note that different subsets of rows could yield the same vertex.
A second alternative can be treating the polyhedron's vertices and edges as a graph (might work faster than the brute force solution above):
- Start at any vertex $x$ of the polytope. For example, the one you found using the Simplex, Interior Point or Ellipsoid method with some cost function.
- Find all $P$'s edges incident to $x$. That is, all 1-dimensional faces of $P$. This can be done similar to pivoting on nonbasic variables (with respect to the current vertex). Note that vertices are 0-dimensional faces of $P$.
- Explore this graph (with the analogy of vertices and edges) using breadth-first search or depth-first search.
As @batwing mentioned, another alternative is using the Double Description Method by Motzkin et al. to generate all extreme points and extreme rays of a general convex polyhedron represented as a system of linear inequalities $Ax \leq b$. An implementation called
cdd can be found at Komei Fukuda's website here, while this GitHub repo contains
pycddlib, a Python wrapper to interact with that library. Finally, at this repo the package
pypoman is developed to interact with the Python wrapper to get the extreme points for $Ax \leq b$ starting from $A$ and $b$.