ある程度のチケットを購入することで、抽選で勝つ確率を最大限にしたいと考えています。このために、私は次のコードPythonの線形プログラミング - 変数を整数に制限する方法
import numpy as np
import math as mt
from scipy.optimize import minimize
from pulp import *
def objective(tickets, winners = 500, losers = 2500, cost_of_ticket = 40, winning_amt = 1000):
Pwin = 1 - mt.factorial(losers)//mt.factorial(losers - tickets)*mt.factorial(winners+losers-tickets)/mt.factorial(winners+losers)
Ewin = Pwin*(winning_amt - cost_of_ticket*tickets)
return Ewin
# declare your variables
tickets = LpVariable("tickets", range(0, 10)) # 0<= tickets <= 10
prob = LpProblem("problem", LpMaximize)
#define the objective
prob += objective(tickets)
# solve the problem
status = prob.solve(GLPK(msg=0))
LpStatus[status]
# print the results
value(tickets)
を書いた問題は、目的関数に渡されるチケットの数が整数(そして失敗した階乗関数)ではないことのようです。誰かがチケットが正の整数値に限定されていることをどのように保証するべきか、誰にでも提案できますか?
答えは8でなければなりません。目的関数を手動で呼び出してチェックすることで、これを行うことができます。
を説明しているまあ、明らかな方法はによってそれを整数に変換することです値に 'int()'を呼び出します。あなたがそれをすることができない理由はありますか? –
申し訳ありませんが、私は少しこれに新しいです - しかし、どこを整数にする必要がありますか?目的関数で、またはLpVariableとして "チケット"を宣言したら? – user1936752
説明[ここ](https://pythonhosted.org/PuLP/pulp.html#pulp.LpVariable)のような変数を定義するときに宣言する必要があります。あなたの関数ベースのアプローチがここではうまくいくかどうかは分かりませんが、それは難しいです。 – sascha