我using Pulp来解决一个线性程序(也用scipy获得相同的结果)。我的线性程序表达式有问题,或者我不知道有关单纯形算法如何工作的一些棘手细节。
以下是最小化的目标函数,请注意#app/models/listing.rb
class Listing < ActiveRecord::Base
enum status: [:draft, :published] #-> defaults to draft
belongs_to :user
has_many :photos
####
validates :name, :user, :photos, :etc, :etc, presence: true, unless: "draft?"
####
def publish!
self.update status: :published
end
end
的乘数为x2
,因此我不希望0
或x1
除了x2
之外还有任何值,因为0
没有最大约束,x3
能够为最小化提供更多值:
线性方程组:
作为一种解决方案,即使其目标函数的乘数为-1 * x3
,我也会得到x2 = 20
。
如果在目标函数中我设置0
,那么它可以正常工作。
答案 0 :(得分:2)
您发布的解决方案给出了目标= -380。检查x=[20,0,0,20,0,20,20,0]
,目标函数也是-380,这意味着它也是最优的,因此,你有无限多的解决方案(很容易证明这两点的任何凸组合)是最佳的,请参阅任何线性规划书籍。问题是当PuLP求解器遇到一个最佳极值点时,它就会停止。如果您有兴趣获得所有最佳极值点,我建议您使用Cplex(它不是免费的,但您可能有资格参加IBM学术计划)。此外,您可以在PuLP求解器中为Dual Simlex设置解决方法,使其朝不同方向前进,并且您有可能获得另一个极端点。