成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

淺談Python數學建模之固定費用問題

瀏覽:202日期:2022-06-16 08:05:46
目錄一、固定費用問題案例解析1.1、固定費用問題(Fixed cost problem)1.2、案例問題描述1.3、建模過程分析1.4、PuLP 求解固定費用問題的編程1.5、Python 例程:固定費用問題1.6、Python 例程運行結果二、PuLP 求解規劃問題的快捷方法2.1、PuLP 求解固定費用問題的編程2.2、Python 例程:PuLP 快捷方法2.3、Python 例程運行結果一、固定費用問題案例解析1.1、固定費用問題(Fixed cost problem)

固定費用問題,是指求解生產成本最小問題時,總成本包括固定成本和變動成本,而選擇不同生產方式會有不同的固定成本,因此總成本與選擇的生產方式有關。

固定費用問題,實際上是互斥的目標函數問題,對于不同的生產方式具有多個互斥的目標函數,但只有一個起作用。固定費用問題不能用一般的線性規劃模型求解。

一般地,設有 m 種生產方式可供選擇,采用第 j 種方式時的固定成本為 (K_j)、變動成本為 (c_j)、產量為 (x_j),則采用各種生產方式的總成本分別為:

淺談Python數學建模之固定費用問題

該類問題的建模方法,為了構造統一的目標函數,可以引入 m 個 0-1 變量 y_j 表示是否采用第 j 種生產方式:

淺談Python數學建模之固定費用問題

于是可以構造新的目標函數和約束條件:

淺談Python數學建模之固定費用問題

M 是一個充分大的常數。

1.2、案例問題描述

例題 1:

某服裝廠可以生產 A、B、C 三種服裝,生產不同種類服裝需要租用不同設備,設備租金、生產成本、銷售價格等指標如下表所示。

服裝種類 設備租金 材料成本 銷售價格 人工工時 設備工時 設備可用工時 單位 (元) (元/件) (元/件) (小時/件) (小時/件) (小時) A 5000 280 400 5 3 300 B 2000 30 40 1 0.5 300 C 2000 200 300 4 2 300

如果各類服裝的市場需求都足夠大,服裝廠每月可用人工時為 2000h,那么應該如何安排生產計劃使利潤最大?

1.3、建模過程分析

首先要理解生產某種服裝就會發生設備租金,租金只與是否生產該產品有關,而與生產數量無關,這就是固定成本。因此本題屬于固定費用問題。

有些同學下意識地認為是從 3 種產品中選擇一種,但題目中并沒有限定必須或只能生產一種產品,因此決策結果可以是都不生產、選擇 1 種或 2 種產品、3 種都生產。

決策結果會是什么都不生產嗎?有可能的。

每種產品的利潤:(銷售價格 - 材料成本)× 生產數量 - 設備租金

本題中如果設備租金很高,決策結果就可能是什么都不做時利潤最大,這是利潤為 0,至少不虧。

現在可以用固定費用問題的數學模型來描述問題了:

淺談Python數學建模之固定費用問題

1.4、PuLP 求解固定費用問題的編程

編程求解建立的數學模型,用標準模型的優化算法對模型求解,得到優化結果。

模型求解的編程步驟與之前的線性規劃、整數規劃問題并沒有什么區別,這就是 PuLP工具包的優勢。

(0)導入 PuLP庫函數

import pulp

(1)定義一個規劃問題

FixedCostP1 = pulp.LpProblem('Fixed_cost_problem', sense=pulp.LpMaximize) # 定義問題,求最大值

pulp.LpProblem 用來定義問題的構造函數。'FixedCostP1'是用戶定義的問題名。參數 sense 指定問題求目標函數的最小值/最大值 。本例求最大值,選擇 “pulp.LpMaximize” 。

(2)定義決策變量

x1 = pulp.LpVariable(’A’, cat=’Binary’) # 定義 x1,0-1變量,是否生產 A 產品x2 = pulp.LpVariable(’B’, cat=’Binary’) # 定義 x2,0-1變量,是否生產 B 產品x3 = pulp.LpVariable(’C’, cat=’Binary’) # 定義 x3,0-1變量,是否生產 C 產品y1 = pulp.LpVariable(’yieldA’, lowBound=0, upBound=100, cat=’Integer’) # 定義 y1,整型變量y2 = pulp.LpVariable(’yieldB’, lowBound=0, upBound=600, cat=’Integer’) # 定義 y2,整型變量y3 = pulp.LpVariable(’youCans’, lowBound=0, upBound=150, cat=’Integer’) # 定義 y3,整型變量

pulp.LpVariable 用來定義決策變量的函數。參數 cat 用來設定變量類型,’ Binary ’ 表示0/1變量(用于0/1規劃問題),’ Integer ’ 表示整數變量。’lowBound’、’upBound’ 分別表示變量取值范圍的下限和上限。

(3)添加目標函數

FixedCostP1 += pulp.lpSum(-5000*x1-2000*x2-2000*x3+120*y1+10*y2+100*y3) # 設置目標函數 f(x)

(4)添加約束條件

FixedCostP1 += (5*y1 + y2 + 4*y3 <= 2000) # 不等式約束FixedCostP1 += (3*y1 - 300*x1 <= 0) # 不等式約束FixedCostP1 += (0.5*y2 - 300*x2 <= 0) # 不等式約束FixedCostP1 += (2*y3 - 300*x3 <= 0) # 不等式約束

添加約束條件使用 '問題名 += 約束條件表達式' 格式。約束條件可以是等式約束或不等式約束,不等式約束可以是 小于等于 或 大于等于,分別使用關鍵字'>='、'<='和'=='。

(5)求解

FixedCostP1.solve()

solve() 是求解函數,可以對求解器、求解精度進行設置。

1.5、Python 例程:固定費用問題

import pulp # 導入 pulp 庫# 主程序def main(): # 固定費用問題(Fixed cost problem) print('固定費用問題(Fixed cost problem)') # 問題建模: '''決策變量: y(i) = 0, 不生產第 i 種產品 y(i) = 1, 生產第 i 種產品x(i), 生產第 i 種產品的數量, i>=0 整數 i=1,2,3目標函數: min profit = 120x1 + 10x2+ 100x3 - 5000y1 - 2000y2 - 2000y3約束條件: 5x1 + x2 + 4x3 <= 2000 3x1 <= 300y1 0.5x2 <= 300y2 2x3 <= 300y3變量取值范圍:Youcans XUPT 0<=x1<=100, 0<=x2<=600, 0<=x3<=150, 整數變量 y1, y2 ,y3 為 0/1 變量 ''' # 1. 固定費用問題(Fixed cost problem), 使用 PuLP 工具包求解 # (1) 建立優化問題 FixedCostP1: 求最大值(LpMaximize) FixedCostP1 = pulp.LpProblem('Fixed_cost_problem_1', sense=pulp.LpMaximize) # 定義問題,求最大值 # (2) 建立變量 x1 = pulp.LpVariable(’A’, cat=’Binary’) # 定義 x1,0-1變量,是否生產 A 產品 x2 = pulp.LpVariable(’B’, cat=’Binary’) # 定義 x2,0-1變量,是否生產 B 產品 x3 = pulp.LpVariable(’C’, cat=’Binary’) # 定義 x3,0-1變量,是否生產 C 產品 y1 = pulp.LpVariable(’yieldA’, lowBound=0, upBound=100, cat=’Integer’) # 定義 y1,整型變量 y2 = pulp.LpVariable(’yieldB’, lowBound=0, upBound=600, cat=’Integer’) # 定義 y2,整型變量 y3 = pulp.LpVariable(’yieldC’, lowBound=0, upBound=150, cat=’Integer’) # 定義 y3,整型變量 # (3) 設置目標函數 FixedCostP1 += pulp.lpSum(-5000*x1-2000*x2-2000*x3+120*y1+10*y2+100*y3) # 設置目標函數 f(x) # (4) 設置約束條件 FixedCostP1 += (5*y1 + y2 + 4*y3 <= 2000) # 不等式約束 FixedCostP1 += (3*y1 - 300*x1 <= 0) # 不等式約束 FixedCostP1 += (0.5*y2 - 300*x2 <= 0) # 不等式約束 FixedCostP1 += (2*y3 - 300*x3 <= 0) # 不等式約束 # (5) 求解 youcans FixedCostP1.solve() # (6) 打印結果 print(FixedCostP1.name) if pulp.LpStatus[FixedCostP1.status] == 'Optimal': # 獲得最優解for v in FixedCostP1.variables(): # youcans print(v.name, '=', v.varValue) # 輸出每個變量的最優值print('Youcans F(x) = ', pulp.value(FixedCostP1.objective)) # 輸出最優解的目標函數值 returnif __name__ == ’__main__’: # Copyright 2021 YouCans, XUPT main() 1.6、Python 例程運行結果

Welcome to the CBC MILP Solver 

Version: 2.9.0 

Build Date: Feb 12 2015 

Result - Optimal solution found

Fixed_cost_problem_1

A = 1.0

B = 1.0

C = 1.0

yieldA = 100.0

yieldB = 600.0

yieldC = 150.0

Max F(x) =  24000.0

從固定費用問題模型的求解結果可知,A、B、C 三種服裝都生產,產量分別為 A/100、B/600、C/150 時獲得最大利潤為:24000。

二、PuLP 求解規劃問題的快捷方法2.1、PuLP 求解固定費用問題的編程

通過從線性規劃、整數規劃、0-1規劃到上例中的混合0-1規劃問題,我們已經充分體會到 PuLP 使用相同的步驟和參數處理不同問題所帶來的便利。

但是,如果問題非常復雜,例如變量數量很多,約束條件復雜,逐個定義變量、逐項編寫目標函數與約束條件的表達式,不僅顯得重復冗長,不方便修改對變量和參數的定義,而且在輸入過程中容易發生錯誤。因此,我們希望用字典、列表、循環等快捷方法來進行變量定義、目標函數和約束條件設置。

PuLP 提供了快捷建模的編程方案,下面我們仍以上節中的固定費用問題為例進行介紹。本例中的問題、條件和參數都與上節完全相同,以便讀者進行對照比較快捷方法的具體內容。

(0)導入 PuLP 庫函數

import pulp

(1)定義一個規劃問題

FixedCostP2 = pulp.LpProblem('Fixed_cost_problem', sense=pulp.LpMaximize) # 定義問題,求最大值

(2)定義決策變量

types = [’A’, ’B’, ’C’] # 定義產品種類status = pulp.LpVariable.dicts('生產決策', types, cat=’Binary’) # 定義 0/1 變量,是否生產該產品yields = pulp.LpVariable.dicts('生產數量', types, lowBound=0, upBound=600, cat=’Integer’) # 定義整型變量

本例中的快捷方法使用列表 types 定義 0/1 變量 status 和 整型變量 yields,不論產品的品種有多少,都只有以上幾句,從而使程序大為簡化。

(3)添加目標函數

fixedCost = {’A’:5000, ’B’:2000, ’C’:2000} # 各產品的 固定費用unitProfit = {’A’:120, ’B’:10, ’C’:100} # 各產品的 單位利潤FixedCostP2 += pulp.lpSum([(yields[i]*unitProfit[i]- status[i]*fixedCost[i]) for i in types])

雖然看起來本例中定義目標函數的程序語句較長,但由于使用字典定義參數、使用 for 循環定義目標函數,因此程序更加清晰、簡明、便于修改參數、不容易輸入錯誤。

(4)添加約束條件

humanHours = {’A’:5, ’B’:1, ’C’:4} # 各產品的 單位人工工時machineHours = {’A’:3.0, ’B’:0.5, ’C’:2.0} # 各產品的 單位設備工時maxHours = {’A’:300, ’B’:300, ’C’:300} # 各產品的 最大設備工時FixedCostP2 += pulp.lpSum([humanHours[i] * yields[i] for i in types]) <= 2000 # 不等式約束for i in types: FixedCostP2 += (yields[i]*machineHours[i] - status[i]*maxHours[i] <= 0) # 不等式約束

快捷方法對于約束條件的定義與對目標函數的定義相似,使用字典定義參數,使用循環定義約束條件,使程序簡單、結構清楚。

注意本例使用了兩種不同的循環表達方式:語句內使用 for 循環遍歷列表實現所有變量的線性組合,標準的 for 循環結構實現多組具有相似結構的約束條件。讀者可以對照數學模型及上例的例程,理解這兩種定義約束條件的快捷方法。

(5)求解和結果的輸出

# (5) 求解FixedCostP2.solve()# (6) 打印結果print(FixedCostP2.name)temple = '品種 %(type)s 的決策是:%(status)s,生產數量為:%(yields)d'if pulp.LpStatus[FixedCostP2.status] == 'Optimal': # 獲得最優解 for i in types:output = {’type’: i, ’status’: ’同意’ if status[i].varValue else ’否決’, ’yields’: yields[i].varValue}print(temple % output) # youcans@qq.com print('最大利潤 = ', pulp.value(FixedCostP2.objective)) # 輸出最優解的目標函數值

由于快捷方法使用列表或字典定義變量,對求解的優化結果也便于實現結構化的輸出。

2.2、Python 例程:PuLP 快捷方法

import pulp # 導入 pulp 庫# 主程序def main(): # 2. 問題同上,PuLP 快捷方法示例 # (1) 建立優化問題 FixedCostP2: 求最大值(LpMaximize) FixedCostP2 = pulp.LpProblem('Fixed_cost_problem_2', sense=pulp.LpMaximize) # 定義問題,求最大值 # (2) 建立變量 types = [’A’, ’B’, ’C’] # 定義產品種類 status = pulp.LpVariable.dicts('生產決策', types, cat=’Binary’) # 定義 0/1 變量,是否生產該產品 yields = pulp.LpVariable.dicts('生產數量', types, lowBound=0, upBound=600, cat=’Integer’) # 定義整型變量 # (3) 設置目標函數 fixedCost = {’A’:5000, ’B’:2000, ’C’:2000} # 各產品的 固定費用 unitProfit = {’A’:120, ’B’:10, ’C’:100} # 各產品的 單位利潤 FixedCostP2 += pulp.lpSum([(yields[i]*unitProfit[i]- status[i]*fixedCost[i]) for i in types]) # (4) 設置約束條件 humanHours = {’A’:5, ’B’:1, ’C’:4} # 各產品的 單位人工工時 machineHours = {’A’:3.0, ’B’:0.5, ’C’:2.0} # 各產品的 單位設備工時 maxHours = {’A’:300, ’B’:300, ’C’:300} # 各產品的 最大設備工時 FixedCostP2 += pulp.lpSum([humanHours[i] * yields[i] for i in types]) <= 2000 # 不等式約束 for i in types:FixedCostP2 += (yields[i]*machineHours[i] - status[i]*maxHours[i] <= 0) # 不等式約束 # (5) 求解 youcans FixedCostP2.solve() # (6) 打印結果 print(FixedCostP2.name) temple = '品種 %(type)s 的決策是:%(status)s,生產數量為:%(yields)d' if pulp.LpStatus[FixedCostP2.status] == 'Optimal': # 獲得最優解for i in types: output = {’type’: i, ’status’: ’同意’ if status[i].varValue else ’否決’, ’yields’: yields[i].varValue} print(temple % output)print('最大利潤 = ', pulp.value(FixedCostP2.objective)) # 輸出最優解的目標函數值 returnif __name__ == ’__main__’: # Copyright 2021 YouCans, XUPT main() 2.3、Python 例程運行結果

Welcome to the CBC MILP Solver 

Version: 2.9.0 

Build Date: Feb 12 2015 

Result - Optimal solution found

Fixed_cost_problem_2

品種 A 的決策是:同意,生產數量為:100

品種 B 的決策是:同意,生產數量為:600

品種 C 的決策是:同意,生產數量為:150

最大利潤 =  24000.0

本例的問題、條件和參數都與上節完全相同,只是采用 PuLP 提供的快捷建模的編程方案,優化結果也與 PuLP 標準方法完全相同,但本例使用了結構化的輸出顯示,使輸出結果更為直觀。

以上就是淺談Python數學建模之固定費用問題的詳細內容,更多關于Python 數學建模 固定費用的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
久久se精品一区二区| 91在线播放网址| av不卡一区二区三区| 欧美区在线观看| 香蕉久久夜色精品国产使用方法| 精品999日本| 国产精品久久久久天堂| 色综合色狠狠天天综合色| 日韩精品在线看片z| 韩国视频一区二区| 可以看av的网站久久看| 夜夜嗨av一区二区三区网页| 欧美激情第8页| 久久九九久精品国产免费直播| av午夜一区麻豆| 久久久99久久| 91麻豆精东视频| 国产午夜精品福利| 91在线视频18| 久久这里只有精品首页| 风流少妇一区二区| 日韩精品一区二区三区中文不卡| 国产另类ts人妖一区二区| 欧美精品乱人伦久久久久久| 国内精品久久久久影院薰衣草| 欧美日韩免费不卡视频一区二区三区 | 国产精品一二二区| 欧美另类久久久品| 国产一区二区三区香蕉 | 久久久www免费人成精品| 99精品视频在线观看| 久久蜜桃av一区精品变态类天堂| 欧美在线免费| 国产精品嫩草影院com| 亚洲网友自拍| 亚洲欧美成人一区二区三区| 国产精品久久波多野结衣| 亚洲在线成人精品| 免费在线亚洲| 日韩成人一级片| 欧美视频中文字幕| 成人午夜免费电影| 国产日本欧美一区二区| 伊人激情综合| 亚洲国产精品久久不卡毛片| 色婷婷综合视频在线观看| 另类小说综合欧美亚洲| 欧美高清www午色夜在线视频| 国产成人高清视频| 国产亚洲一本大道中文在线| 欧美午夜免费影院| 亚洲午夜一二三区视频| 色哟哟国产精品免费观看| 热久久国产精品| 欧美精品tushy高清| 99久久99久久免费精品蜜臀| 亚洲欧洲性图库| 国产精品一区在线观看| 美女一区二区在线观看| 欧美一区二区三区系列电影| www.欧美日韩| 国产精品卡一卡二卡三| 先锋影音久久久| 六月丁香婷婷久久| 久久这里只精品最新地址| 亚洲精品123区| 日韩影视精彩在线| 日韩网站在线看片你懂的| 欧美 日韩 国产在线| 成人欧美一区二区三区视频网页| 久久久久久久高潮| 国产99久久精品| 国产精品全国免费观看高清| 国产亚洲精品v| 国产精品伊人色| 国产精品不卡一区二区三区| 欧美主播一区二区三区美女 久久精品人| 久久精品国产99| 国产三级一区二区| 久久精品男女| 成人av在线观| 亚洲综合自拍偷拍| 4438x亚洲最大成人网| 91老师片黄在线观看| 亚洲午夜在线视频| 日韩限制级电影在线观看| 国精品一区二区| 日本免费在线视频不卡一不卡二| 日韩欧美激情一区| 精品二区视频| 久久精品国产一区二区三区免费看| 精品久久久久99| 国产精品毛片在线看| 国产成人鲁色资源国产91色综| 亚洲另类一区二区| 制服丝袜成人动漫| 亚洲欧洲久久| 国产精品一区二区免费不卡 | 国内自拍一区| 理论电影国产精品| 中文字幕国产精品一区二区| 一本色道a无线码一区v| 色综合久久综合| 日本va欧美va精品发布| 国产日本欧洲亚洲| 欧美性受极品xxxx喷水| 欧美成人在线免费观看| 男人的天堂亚洲一区| 亚洲国产高清在线| 欧美图片一区二区三区| 欧美日韩精品一本二本三本| 久久成人免费电影| 亚洲美女屁股眼交3| 日韩三级视频中文字幕| 久久精品天堂| 欧美午夜电影在线观看 | 一区二区成人在线视频| 欧美成人一区二区| 久久午夜av| 亚洲五月婷婷| 国产经典欧美精品| 午夜av电影一区| 国产精品色婷婷久久58| 欧美乱妇15p| 模特精品在线| 激情视频一区二区| 成人激情综合网站| 久久精品999| 亚洲欧美区自拍先锋| 久久品道一品道久久精品| 欧美系列亚洲系列| 亚洲精品久久| 91亚洲国产成人精品一区二三| 麻豆极品一区二区三区| 亚洲码国产岛国毛片在线| 精品国产欧美一区二区| 欧美视频一区二区三区| 99精品国产99久久久久久福利| aaa亚洲精品| 国产剧情在线观看一区二区| 婷婷亚洲久悠悠色悠在线播放| 国产精品久久久久aaaa樱花| 欧美成人一区二区三区片免费| 欧美色老头old∨ideo| 麻豆9191精品国产| 在线欧美不卡| 91免费观看视频在线| 国产精品自拍三区| 日本不卡一区二区三区高清视频| 国产精品高潮久久久久无| 精品国精品自拍自在线| 欧美视频三区在线播放| 亚洲在线免费| 伊人久久成人| 91丨九色丨国产丨porny| 国产剧情av麻豆香蕉精品| 奇米色777欧美一区二区| 亚洲成人av一区二区| 成人欧美一区二区三区视频网页| 国产日产精品一区| 精品国产三级电影在线观看| 51精品久久久久久久蜜臀| 欧美图区在线视频| 老司机免费视频久久| 亚洲欧美日韩在线观看a三区| 一区二区自拍| 国语自产精品视频在线看8查询8| 99久久精品99国产精品| 国产成人h网站| 国产成人精品一区二区三区四区| 国内偷窥港台综合视频在线播放| 日韩电影一区二区三区| 日韩精品欧美精品| 日韩高清电影一区| 日本不卡视频一二三区| 日韩成人dvd| 日韩精品国产精品| 日韩一区精品字幕| 日韩avvvv在线播放| 三级一区在线视频先锋| 视频一区二区欧美| 婷婷成人综合网| 午夜伦欧美伦电影理论片| 亚洲精品综合在线| 亚洲精品乱码久久久久久久久| 亚洲欧美一区二区视频| 亚洲情趣在线观看| 一区二区三区精品| 天天av天天翘天天综合网| 日韩精品国产欧美| 久久精品噜噜噜成人88aⅴ| 极品少妇xxxx精品少妇| 国产精品99久久久| 国产91精品精华液一区二区三区| 国产91对白在线观看九色| 不卡在线观看av| 91蜜桃婷婷狠狠久久综合9色| 欧美在线免费| 国产专区一区| 国产精品毛片一区二区三区|