如何在线性编程中表示公交车?

时间:2016-11-22 23:22:31

标签: linear-algebra linear-programming

您好我在一家公交公司担任程序员,我需要实施一个乘坐初始化请求。我认为这可能是一个线性编程问题,但我不确定,我要求一些帮助:)

乘客向我的服务器发送初始公交车的请求。

该请求包括乘坐的不同实体。例如,请求可能是:

Request = [2 Adults, 3 Children, 1 Dog, 2 Bikes]

我的服务器知道乘客有哪些不同的机票。 每张票都有一个成本(乘客买的价格)和一个可以乘坐的实体列表。

例如,乘客可能拥有:

Ticket1- cost 10, enables [1 Adult, 1 Bike]
Ticket2- cost 20, enables [1 Child]
Ticket3- cost 10, enables [1 Adult, 1 Dog]

我很乐意帮助设计一种算法,该算法可以找到最佳的车票集合(最佳是最便宜的组合),或者如果乘车不可行则返回错误。

我认为这可以表示为线性编程问题然后我可以使用单纯形算法来找到最优解。但是我不确定该怎么做...请帮助我,我不是一个数学专家:​​/

谢谢!

1 个答案:

答案 0 :(得分:0)

以下是一些可用作问题模板的R代码。

library(lpSolveAPI)

solve_request <- function(request, available_tickets) {
    lprec <- make.lp(0, ncol=3) # decision variables: how many tickets of type 1, 2 or 3 
    set.type(lprec, columns=seq(1,3), type="integer") # the decision variables are integers, there are no half tickets
    set.objfn(lprec, obj=c(10, 20, 10)) # objective: minimize costs of tickets

    # first type of constraints: no more tickets than available
    add.constraint(lprec, xt=c(1,0,0), type="<=", rhs=available_tickets["t1"])
    add.constraint(lprec, xt=c(0,1,0), type="<=", rhs=available_tickets["t2"])
    add.constraint(lprec, xt=c(0,0,1), type="<=", rhs=available_tickets["t3"])

    # second type of constraint: choosen ticket must meet request
    add.constraint(lprec, xt=c(1,0,1), type=">=", rhs=request["adults"])
    add.constraint(lprec, xt=c(0,1,0), type=">=", rhs=request["children"])
    add.constraint(lprec, xt=c(0,0,1), type=">=", rhs=request["dogs"])
    add.constraint(lprec, xt=c(1,0,1), type=">=", rhs=request["bikes"])

    solve(lprec)
    return(setNames(get.variables(lprec), c("t1", "t2", "t3")))
}

solve_request(request=c(adults=2, children=3, dogs=1, bikes=2), available_tickets=c(t1=10, t2=10, t3=10))

返回

t1 t2 t3 
 1  3  1