Thank you for your help! But here are still some questions:
As for the bilinear programming, if the bilinear variable is bounded, to get a upper bound, we can bring the value of bilinear variable(only the value of variable which leads to the bilinear constraints) got from the lower bound problem into the original bilinear program(in which the bilinear constraints are not considered). The effectiveness of this method has been shown in some researches and books like
A Reformulation-linearization Technique for Solving Discrete and Continuous Nonconvex Problem. Maybe this method can't get a tight upper bound compared with the nonlinear upper program, but it can be easily solved.
The procedure of this method can be summarized:
1. Use McCormick envelope to get the LP relaxed lower program;
2. Solve the lower program and get the value of bilinear variables;
3. Replace bilinear variables of original bilinear program with the value of bilinear variables got from the lower program(notice that the bilinear contraints now are not considered in the original bilinear program, which makes sure the original problem is feasible) and solve this program and get a upper bound.
4. Check if UB=LB, if not, branch and bound method is used, then repeat the above procedures.