How to remove cycles from a directed graph
There is a paper "breaking cycles in noisy hierarchies" which talks about leveraging graph hierarchy to delete cycle edges to reduce a directed graph to a DAG. 

The reduced DAG will maintain the graph hierarchy of the original graph as much as possible. 

The corresponding code is available on Github: https://github.com/zhenv5/breaking_cycles_in_noisy_hierarchies