如何在 Xpress 中编写 epsilon 约束模型

How to code epsilon constraint model in Xpress

提问人:marsh 提问时间:2/11/2023 最后编辑:marc_smarsh 更新时间:10/27/2023 访问量:47

问:

我想使用ε约束方法求解一个问题,并绘制帕累托最优解集和帕累托前沿。

我认为我已经设法做到了这一点,因为我的结果看起来与我使用加权求和方法所取得的相似,尽管我需要讨论每种方法在获得帕累托前沿方面的效率,并且完全不知道该说什么。

任何帮助将不胜感激!

当我使用非常大的 epsilon 值时,它看起来“正常”,但是当我将其限制为小于我的一个函数的值范围时,它变得完全不同。

epsilon = np.linspace(0,9,25)
m_e = xp.problem(name='Prob1')

### Create decision variables and add them to the model ###
x = np.array([xp.var('x1',lb=-20), xp.var('x2',ub=20)], dtype=xp.npvar)
m_e.addVariable(x)

# Define objective vector
f1 = 2 + (x[0]-2)**2 + (x[1]-1)**2

f2 = 5*x[0] + (x[1]-5)**2

### Define constraints and add them to the model

m_e.addConstraint(x[0] -(3*x[1]) + 10 <= 0)
m_e.addConstraint(x[0]**2 + x[1]**2 <= 225)
        ###
    
### Set parameters and create arrays for storing solutions

# Array containing the pareto front
front = np.zeros((iterations,2))
# Array containing the pareto optimal points
pareto = np.zeros((iterations,2))
# Compute all the weights
         ###
# Create plots  
fig, ax = plt.subplots(1,2)
iterations = 25

# loop through the number of required iterations
for i in range(iterations):
    m_e.addConstraint(5*x[0] + (x[1]-5)**2 <= epsilon[i])
    # Update objective value 
    m_e.setObjective(f1, sense = xp.minimize)
    # Solve the model
    m_e.solve()
    
    # Store the pareto optimal point
    pareto[i] = m_e.getSolution(x)
   
    # Find the corresponding solutions in objective space
    front[i,0] = xp.evaluate(f1,problem=m_e)
    front[i,1] = xp.evaluate(f2,problem=m_e)

    # Plot results
    ax[0].scatter(pareto[i,0],pareto[i,1],color='blue')
    ax[1].scatter(front[i,0],front[i,1],color='red')
    

### Set plot title ect ### 
ax[0].set_ylabel(r'$x_2$')
ax[0].set_xlabel(r'$x_1$')
ax[0].set_title('Decision space space')

ax[1].set_ylabel(r'$f_2(x)$')
ax[1].set_xlabel(r'$f_1(x)$')
ax[1].set_title('Objective space')

fig.tight_layout(pad=1.0)
python epsilon xpress-optimizer

评论

0赞 Daniel Junglas 2/17/2023
你没有展示的一件事是最重要的:其中的值是什么?如果这些值非常小,则可能会遇到准确性问题。特别是当这些值小于可行性公差时。epsilon

答: 暂无答案