I have tried to implement a toy problem (MIP) from the literature using Lagrangian Relaxation with the subgradient method, I implemented it correctly and I got the upper bound which is updated at each iteration, however, for the lower bound (original problem), I optimized it to using a solver inside the algorithm, but in the literature, it has been mentioned that we can make use of relaxed problem solution to find a lower bound (maximization problem), most of them they refer to a heuristic to find such lower bound because in most cases the solution of relaxed problem will be infeasible to the original one, but I did not figure it out, do I have to optimize the lower bound using the solution from LR and solver or just plug the solution of the relaxed problem into the original problem ( in this case it will not work, as I have tried it before).
The relaxed constraints will typically be violated, but the rest of the constraints will be satisfied. To get a feasible solution to the original problem, you need to modify the relaxed solution somehow to satisfy all the constraints. Such a "repair" heuristic is usually problem-specific. For example, Section 10.4 of Wolsey's Integer Programming describes a greedy heuristic when the original problem is set covering and all covering constraints are relaxed: ignore the rows that are already covered by the relaxed solution, and greedily change some variables from $0$ to $1$ to cover the rest.