Downgrading NonlinearExpr to QuadExpr or AffExpr

Is there any way to downgrade that NonlinearExpr to QuadExpr or AffExpr?

Nope.

I’d encourage you to just think up alternative input syntaxes.

using JuMP
model_1 = Model()
@variable(model_1, x_1)
payoff_1(x_1, p_2) = -x_1 * x_1 + x_1 * p_2
@objective(model_1, Max, payoff_1(x_1, 0.0))

model_2 = Model()
@variable(model_2, x_2)
payoff_2(p_1, x_2) = -x_2 * x_2 + p_1 * x_2
@objective(model_2, Max, payoff_2(0.0, x_2))

@objective(model_1, Max, 0.5 * payoff_1(x_1, 0.0) + 0.5 * payoff_1(x_1, 5.0))

It’s tricky to mix variables and parameters from multiple JuMP models because it is also conceptually tricky for the user. What variables and what constraints belong to which model, etc.

Make something that is very clear, even if it means more typing. If player 1 expects player 2 to follow a mixed strategy, perhaps something like:

using JuMP
model_1 = Model()
@variable(model_1, x_1)
@variable(model_1, p_2[1:3] in Parameter(0))
p_w = [0.2, 0.5, 0.3]
@objective(model_1, Max, sum(p_w[i] * (-x_1 * x_1 + x_1 * p_2[i]) for i in 1:3))