久久99久久人婷婷精品综合_超碰aⅴ人人做人人爽欧美_亚洲电影第三页_日韩欧美一中文字暮专区_波多野结衣的一区二区三区_婷婷在线播放_人人视频精品_国产精品日韩精品欧美精品_亚洲免费黄色_欧美性猛交xxxxxxxx

python目標(biāo)函數(shù)解題 Python函數(shù)題目

萬(wàn)字教你如何用 Python 實(shí)現(xiàn)線(xiàn)性規(guī)劃

想象一下,您有一個(gè)線(xiàn)性方程組和不等式系統(tǒng)。這樣的系統(tǒng)通常有許多可能的解決方案。線(xiàn)性規(guī)劃是一組數(shù)學(xué)和計(jì)算工具,可讓您找到該系統(tǒng)的特定解,該解對(duì)應(yīng)于某些其他線(xiàn)性函數(shù)的最大值或最小值。

創(chuàng)新互聯(lián)專(zhuān)注于企業(yè)全網(wǎng)營(yíng)銷(xiāo)推廣、網(wǎng)站重做改版、正藍(lán)網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5頁(yè)面制作商城系統(tǒng)網(wǎng)站開(kāi)發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性?xún)r(jià)比高,為正藍(lán)等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。

混合整數(shù)線(xiàn)性規(guī)劃是 線(xiàn)性規(guī)劃 的擴(kuò)展。它處理至少一個(gè)變量采用離散整數(shù)而不是連續(xù)值的問(wèn)題。盡管乍一看混合整數(shù)問(wèn)題與連續(xù)變量問(wèn)題相似,但它們?cè)陟`活性和精度方面具有顯著優(yōu)勢(shì)。

整數(shù)變量對(duì)于正確表示自然用整數(shù)表示的數(shù)量很重要,例如生產(chǎn)的飛機(jī)數(shù)量或服務(wù)的客戶(hù)數(shù)量。

一種特別重要的整數(shù)變量是 二進(jìn)制變量 。它只能取 零 或 一 的值,在做出是或否的決定時(shí)很有用,例如是否應(yīng)該建造工廠(chǎng)或者是否應(yīng)該打開(kāi)或關(guān)閉機(jī)器。您還可以使用它們來(lái)模擬邏輯約束。

線(xiàn)性規(guī)劃是一種基本的優(yōu)化技術(shù),已在科學(xué)和數(shù)學(xué)密集型領(lǐng)域使用了數(shù)十年。它精確、相對(duì)快速,適用于一系列實(shí)際應(yīng)用。

混合整數(shù)線(xiàn)性規(guī)劃允許您克服線(xiàn)性規(guī)劃的許多限制。您可以使用分段線(xiàn)性函數(shù)近似非線(xiàn)性函數(shù)、使用半連續(xù)變量、模型邏輯約束等。它是一種計(jì)算密集型工具,但計(jì)算機(jī)硬件和軟件的進(jìn)步使其每天都更加適用。

通常,當(dāng)人們?cè)噲D制定和解決優(yōu)化問(wèn)題時(shí),第一個(gè)問(wèn)題是他們是否可以應(yīng)用線(xiàn)性規(guī)劃或混合整數(shù)線(xiàn)性規(guī)劃。

以下文章說(shuō)明了線(xiàn)性規(guī)劃和混合整數(shù)線(xiàn)性規(guī)劃的一些用例:

隨著計(jì)算機(jī)能力的增強(qiáng)、算法的改進(jìn)以及更多用戶(hù)友好的軟件解決方案的出現(xiàn),線(xiàn)性規(guī)劃,尤其是混合整數(shù)線(xiàn)性規(guī)劃的重要性隨著時(shí)間的推移而增加。

解決線(xiàn)性規(guī)劃問(wèn)題的基本方法稱(chēng)為,它有多種變體。另一種流行的方法是。

混合整數(shù)線(xiàn)性規(guī)劃問(wèn)題可以通過(guò)更復(fù)雜且計(jì)算量更大的方法來(lái)解決,例如,它在幕后使用線(xiàn)性規(guī)劃。這種方法的一些變體是,它涉及使用 切割平面 ,以及。

有幾種適用于線(xiàn)性規(guī)劃和混合整數(shù)線(xiàn)性規(guī)劃的合適且眾所周知的 Python 工具。其中一些是開(kāi)源的,而另一些是專(zhuān)有的。您是否需要免費(fèi)或付費(fèi)工具取決于問(wèn)題的規(guī)模和復(fù)雜性,以及對(duì)速度和靈活性的需求。

值得一提的是,幾乎所有廣泛使用的線(xiàn)性規(guī)劃和混合整數(shù)線(xiàn)性規(guī)劃庫(kù)都是以 Fortran 或 C 或 C++ 原生和編寫(xiě)的。這是因?yàn)榫€(xiàn)性規(guī)劃需要對(duì)(通常很大)矩陣進(jìn)行計(jì)算密集型工作。此類(lèi)庫(kù)稱(chēng)為求解器。Python 工具只是求解器的包裝器。

Python 適合圍繞本機(jī)庫(kù)構(gòu)建包裝器,因?yàn)樗梢院芎玫嘏c C/C++ 配合使用。對(duì)于本教程,您不需要任何 C/C++(或 Fortran),但如果您想了解有關(guān)此酷功能的更多信息,請(qǐng)查看以下資源:

基本上,當(dāng)您定義和求解模型時(shí),您使用 Python 函數(shù)或方法調(diào)用低級(jí)庫(kù),該庫(kù)執(zhí)行實(shí)際優(yōu)化工作并將解決方案返回給您的 Python 對(duì)象。

幾個(gè)免費(fèi)的 Python 庫(kù)專(zhuān)門(mén)用于與線(xiàn)性或混合整數(shù)線(xiàn)性規(guī)劃求解器交互:

在本教程中,您將使用SciPy和PuLP來(lái)定義和解決線(xiàn)性規(guī)劃問(wèn)題。

在本節(jié)中,您將看到線(xiàn)性規(guī)劃問(wèn)題的兩個(gè)示例:

您將在下一節(jié)中使用 Python 來(lái)解決這兩個(gè)問(wèn)題。

考慮以下線(xiàn)性規(guī)劃問(wèn)題:

你需要找到X和?使得紅色,藍(lán)色和黃色的不平等,以及不平等X 0和? 0,是滿(mǎn)意的。同時(shí),您的解決方案必須對(duì)應(yīng)于z的最大可能值。

您需要找到的自變量(在本例中為 x 和 y )稱(chēng)為 決策變量 。要最大化或最小化的決策變量的函數(shù)(在本例中為 z) 稱(chēng)為 目標(biāo)函數(shù) 、 成本函數(shù) 或僅稱(chēng)為 目標(biāo) 。您需要滿(mǎn)足的 不等式 稱(chēng)為 不等式約束 。您還可以在稱(chēng)為 等式約束 的約束中使用方程。

這是您如何可視化問(wèn)題的方法:

紅線(xiàn)代表的功能2 X + Y = 20,和它上面的紅色區(qū)域示出了紅色不等式不滿(mǎn)足。同樣,藍(lán)線(xiàn)是函數(shù) 4 x + 5 y = 10,藍(lán)色區(qū)域被禁止,因?yàn)樗`反了藍(lán)色不等式。黃線(xiàn)是 x + 2 y = 2,其下方的黃色區(qū)域是黃色不等式無(wú)效的地方。

如果您忽略紅色、藍(lán)色和黃色區(qū)域,則僅保留灰色區(qū)域。灰色區(qū)域的每個(gè)點(diǎn)都滿(mǎn)足所有約束,是問(wèn)題的潛在解決方案。該區(qū)域稱(chēng)為 可行域 ,其點(diǎn)為 可行解 。在這種情況下,有無(wú)數(shù)可行的解決方案。

您想最大化z。對(duì)應(yīng)于最大z的可行解是 最優(yōu)解 。如果您嘗試最小化目標(biāo)函數(shù),那么最佳解決方案將對(duì)應(yīng)于其可行的最小值。

請(qǐng)注意,z是線(xiàn)性的。你可以把它想象成一個(gè)三維空間中的平面。這就是為什么最優(yōu)解必須在可行區(qū)域的 頂點(diǎn) 或角上的原因。在這種情況下,最佳解決方案是紅線(xiàn)和藍(lán)線(xiàn)相交的點(diǎn),稍后您將看到。

有時(shí),可行區(qū)域的整個(gè)邊緣,甚至整個(gè)區(qū)域,都可以對(duì)應(yīng)相同的z值。在這種情況下,您有許多最佳解決方案。

您現(xiàn)在已準(zhǔn)備好使用綠色顯示的附加等式約束來(lái)擴(kuò)展問(wèn)題:

方程式 x + 5 y = 15,以綠色書(shū)寫(xiě),是新的。這是一個(gè)等式約束。您可以通過(guò)向上一張圖像添加相應(yīng)的綠線(xiàn)來(lái)將其可視化:

現(xiàn)在的解決方案必須滿(mǎn)足綠色等式,因此可行區(qū)域不再是整個(gè)灰色區(qū)域。它是綠線(xiàn)從與藍(lán)線(xiàn)的交點(diǎn)到與紅線(xiàn)的交點(diǎn)穿過(guò)灰色區(qū)域的部分。后一點(diǎn)是解決方案。

如果插入x的所有值都必須是整數(shù)的要求,那么就會(huì)得到一個(gè)混合整數(shù)線(xiàn)性規(guī)劃問(wèn)題,可行解的集合又會(huì)發(fā)生變化:

您不再有綠線(xiàn),只有沿線(xiàn)的x值為整數(shù)的點(diǎn)。可行解是灰色背景上的綠點(diǎn),此時(shí)最優(yōu)解離紅線(xiàn)最近。

這三個(gè)例子說(shuō)明了 可行的線(xiàn)性規(guī)劃問(wèn)題 ,因?yàn)樗鼈兙哂杏薪缈尚袇^(qū)域和有限解。

如果沒(méi)有解,線(xiàn)性規(guī)劃問(wèn)題是 不可行的 。當(dāng)沒(méi)有解決方案可以同時(shí)滿(mǎn)足所有約束時(shí),通常會(huì)發(fā)生這種情況。

例如,考慮如果添加約束x + y 1會(huì)發(fā)生什么。那么至少有一個(gè)決策變量(x或y)必須是負(fù)數(shù)。這與給定的約束x 0 和y 0相沖突。這樣的系統(tǒng)沒(méi)有可行的解決方案,因此稱(chēng)為不可行的。

另一個(gè)示例是添加與綠線(xiàn)平行的第二個(gè)等式約束。這兩行沒(méi)有共同點(diǎn),因此不會(huì)有滿(mǎn)足這兩個(gè)約束的解決方案。

一個(gè)線(xiàn)性規(guī)劃問(wèn)題是 無(wú)界的 ,如果它的可行區(qū)域是無(wú)界,將溶液不是有限。這意味著您的變量中至少有一個(gè)不受約束,可以達(dá)到正無(wú)窮大或負(fù)無(wú)窮大,從而使目標(biāo)也無(wú)限大。

例如,假設(shè)您采用上面的初始問(wèn)題并刪除紅色和黃色約束。從問(wèn)題中刪除約束稱(chēng)為 放松 問(wèn)題。在這種情況下,x和y不會(huì)在正側(cè)有界。您可以將它們?cè)黾拥秸裏o(wú)窮大,從而產(chǎn)生無(wú)限大的z值。

在前面的部分中,您研究了一個(gè)與任何實(shí)際應(yīng)用程序無(wú)關(guān)的抽象線(xiàn)性規(guī)劃問(wèn)題。在本小節(jié)中,您將找到與制造業(yè)資源分配相關(guān)的更具體和實(shí)用的優(yōu)化問(wèn)題。

假設(shè)一家工廠(chǎng)生產(chǎn)四種不同的產(chǎn)品,第一種產(chǎn)品的日產(chǎn)量為x ?,第二種產(chǎn)品的產(chǎn)量為x 2,依此類(lèi)推。目標(biāo)是確定每種產(chǎn)品的利潤(rùn)最大化日產(chǎn)量,同時(shí)牢記以下條件:

數(shù)學(xué)模型可以這樣定義:

目標(biāo)函數(shù)(利潤(rùn))在條件 1 中定義。人力約束遵循條件 2。對(duì)原材料 A 和 B 的約束可以從條件 3 和條件 4 中通過(guò)對(duì)每種產(chǎn)品的原材料需求求和得出。

最后,產(chǎn)品數(shù)量不能為負(fù),因此所有決策變量必須大于或等于零。

與前面的示例不同,您無(wú)法方便地將其可視化,因?yàn)樗兴膫€(gè)決策變量。但是,無(wú)論問(wèn)題的維度如何,原理都是相同的。

在本教程中,您將使用兩個(gè)Python 包來(lái)解決上述線(xiàn)性規(guī)劃問(wèn)題:

SciPy 設(shè)置起來(lái)很簡(jiǎn)單。安裝后,您將擁有開(kāi)始所需的一切。它的子包 scipy.optimize 可用于線(xiàn)性和非線(xiàn)性?xún)?yōu)化。

PuLP 允許您選擇求解器并以更自然的方式表述問(wèn)題。PuLP 使用的默認(rèn)求解器是COIN-OR Branch and Cut Solver (CBC)。它連接到用于線(xiàn)性松弛的COIN-OR 線(xiàn)性規(guī)劃求解器 (CLP)和用于切割生成的COIN-OR 切割生成器庫(kù) (CGL)。

另一個(gè)偉大的開(kāi)源求解器是GNU 線(xiàn)性規(guī)劃工具包 (GLPK)。一些著名且非常強(qiáng)大的商業(yè)和專(zhuān)有解決方案是Gurobi、CPLEX和XPRESS。

除了在定義問(wèn)題時(shí)提供靈活性和運(yùn)行各種求解器的能力外,PuLP 使用起來(lái)不如 Pyomo 或 CVXOPT 等替代方案復(fù)雜,后者需要更多的時(shí)間和精力來(lái)掌握。

要學(xué)習(xí)本教程,您需要安裝 SciPy 和 PuLP。下面的示例使用 SciPy 1.4.1 版和 PuLP 2.1 版。

您可以使用pip以下方法安裝兩者:

您可能需要運(yùn)行pulptest或sudo pulptest啟用 PuLP 的默認(rèn)求解器,尤其是在您使用 Linux 或 Mac 時(shí):

或者,您可以下載、安裝和使用 GLPK。它是免費(fèi)和開(kāi)源的,適用于 Windows、MacOS 和 Linux。在本教程的后面部分,您將看到如何將 GLPK(除了 CBC)與 PuLP 一起使用。

在 Windows 上,您可以下載檔案并運(yùn)行安裝文件。

在 MacOS 上,您可以使用 Homebrew:

在 Debian 和 Ubuntu 上,使用apt來(lái)安裝glpk和glpk-utils:

在Fedora,使用dnf具有g(shù)lpk-utils:

您可能還會(huì)發(fā)現(xiàn)conda對(duì)安裝 GLPK 很有用:

安裝完成后,可以查看GLPK的版本:

有關(guān)詳細(xì)信息,請(qǐng)參閱 GLPK 關(guān)于使用Windows 可執(zhí)行文件和Linux 軟件包進(jìn)行安裝的教程。

在本節(jié)中,您將學(xué)習(xí)如何使用 SciPy優(yōu)化和求根庫(kù)進(jìn)行線(xiàn)性規(guī)劃。

要使用 SciPy 定義和解決優(yōu)化問(wèn)題,您需要導(dǎo)入scipy.optimize.linprog():

現(xiàn)在您已經(jīng)linprog()導(dǎo)入,您可以開(kāi)始優(yōu)化。

讓我們首先解決上面的線(xiàn)性規(guī)劃問(wèn)題:

linprog()僅解決最小化(而非最大化)問(wèn)題,并且不允許具有大于或等于符號(hào) ( ) 的不等式約束。要解決這些問(wèn)題,您需要在開(kāi)始優(yōu)化之前修改您的問(wèn)題:

引入這些更改后,您將獲得一個(gè)新系統(tǒng):

該系統(tǒng)與原始系統(tǒng)等效,并且將具有相同的解決方案。應(yīng)用這些更改的唯一原因是克服 SciPy 與問(wèn)題表述相關(guān)的局限性。

下一步是定義輸入值:

您將上述系統(tǒng)中的值放入適當(dāng)?shù)牧斜怼⒃M或NumPy 數(shù)組中:

注意:請(qǐng)注意行和列的順序!

約束左側(cè)和右側(cè)的行順序必須相同。每一行代表一個(gè)約束。

來(lái)自目標(biāo)函數(shù)和約束左側(cè)的系數(shù)的順序必須匹配。每列對(duì)應(yīng)一個(gè)決策變量。

下一步是以與系數(shù)相同的順序定義每個(gè)變量的界限。在這種情況下,它們都在零和正無(wú)窮大之間:

此語(yǔ)句是多余的,因?yàn)閘inprog()默認(rèn)情況下采用這些邊界(零到正無(wú)窮大)。

注:相反的float("inf"),你可以使用math.inf,numpy.inf或scipy.inf。

最后,是時(shí)候優(yōu)化和解決您感興趣的問(wèn)題了。你可以這樣做linprog():

參數(shù)c是指來(lái)自目標(biāo)函數(shù)的系數(shù)。A_ub和b_ub分別與不等式約束左邊和右邊的系數(shù)有關(guān)。同樣,A_eq并b_eq參考等式約束。您可以使用bounds提供決策變量的下限和上限。

您可以使用該參數(shù)method來(lái)定義要使用的線(xiàn)性規(guī)劃方法。有以下三種選擇:

linprog() 返回具有以下屬性的數(shù)據(jù)結(jié)構(gòu):

您可以分別訪(fǎng)問(wèn)這些值:

這就是您獲得優(yōu)化結(jié)果的方式。您還可以以圖形方式顯示它們:

如前所述,線(xiàn)性規(guī)劃問(wèn)題的最優(yōu)解位于可行區(qū)域的頂點(diǎn)。在這種情況下,可行區(qū)域只是藍(lán)線(xiàn)和紅線(xiàn)之間的綠線(xiàn)部分。最優(yōu)解是代表綠線(xiàn)和紅線(xiàn)交點(diǎn)的綠色方塊。

如果要排除相等(綠色)約束,只需刪除參數(shù)A_eq并b_eq從linprog()調(diào)用中刪除:

解決方案與前一種情況不同。你可以在圖表上看到:

在這個(gè)例子中,最優(yōu)解是紅色和藍(lán)色約束相交的可行(灰色)區(qū)域的紫色頂點(diǎn)。其他頂點(diǎn),如黃色頂點(diǎn),具有更高的目標(biāo)函數(shù)值。

您可以使用 SciPy 來(lái)解決前面部分所述的資源分配問(wèn)題:

和前面的例子一樣,你需要從上面的問(wèn)題中提取必要的向量和矩陣,將它們作為參數(shù)傳遞給.linprog(),然后得到結(jié)果:

結(jié)果告訴您最大利潤(rùn)是1900并且對(duì)應(yīng)于x ? = 5 和x ? = 45。在給定條件下生產(chǎn)第二和第四個(gè)產(chǎn)品是沒(méi)有利潤(rùn)的。您可以在這里得出幾個(gè)有趣的結(jié)論:

opt.statusis0和opt.successis True,說(shuō)明優(yōu)化問(wèn)題成功求解,最優(yōu)可行解。

SciPy 的線(xiàn)性規(guī)劃功能主要用于較小的問(wèn)題。對(duì)于更大和更復(fù)雜的問(wèn)題,您可能會(huì)發(fā)現(xiàn)其他庫(kù)更適合,原因如下:

幸運(yùn)的是,Python 生態(tài)系統(tǒng)為線(xiàn)性編程提供了幾種替代解決方案,這些解決方案對(duì)于更大的問(wèn)題非常有用。其中之一是 PuLP,您將在下一節(jié)中看到它的實(shí)際應(yīng)用。

PuLP 具有比 SciPy 更方便的線(xiàn)性編程 API。您不必在數(shù)學(xué)上修改您的問(wèn)題或使用向量和矩陣。一切都更干凈,更不容易出錯(cuò)。

像往常一樣,您首先導(dǎo)入您需要的內(nèi)容:

現(xiàn)在您已經(jīng)導(dǎo)入了 PuLP,您可以解決您的問(wèn)題。

您現(xiàn)在將使用 PuLP 解決此系統(tǒng):

第一步是初始化一個(gè)實(shí)例LpProblem來(lái)表示你的模型:

您可以使用該sense參數(shù)來(lái)選擇是執(zhí)行最小化(LpMinimize或1,這是默認(rèn)值)還是最大化(LpMaximize或-1)。這個(gè)選擇會(huì)影響你的問(wèn)題的結(jié)果。

一旦有了模型,就可以將決策變量定義為L(zhǎng)pVariable類(lèi)的實(shí)例:

您需要提供下限,lowBound=0因?yàn)槟J(rèn)值為負(fù)無(wú)窮大。該參數(shù)upBound定義了上限,但您可以在此處省略它,因?yàn)樗J(rèn)為正無(wú)窮大。

可選參數(shù)cat定義決策變量的類(lèi)別。如果您使用的是連續(xù)變量,則可以使用默認(rèn)值"Continuous"。

您可以使用變量x和y創(chuàng)建表示線(xiàn)性表達(dá)式和約束的其他 PuLP 對(duì)象:

當(dāng)您將決策變量與標(biāo)量相乘或構(gòu)建多個(gè)決策變量的線(xiàn)性組合時(shí),您會(huì)得到一個(gè)pulp.LpAffineExpression代表線(xiàn)性表達(dá)式的實(shí)例。

注意:您可以增加或減少變量或表達(dá)式,你可以乘他們常數(shù),因?yàn)榧垵{類(lèi)實(shí)現(xiàn)一些Python的特殊方法,即模擬數(shù)字類(lèi)型一樣__add__(),__sub__()和__mul__()。這些方法用于像定制運(yùn)營(yíng)商的行為+,-和*。

類(lèi)似地,您可以將線(xiàn)性表達(dá)式、變量和標(biāo)量與運(yùn)算符 ==、=以獲取表示模型線(xiàn)性約束的紙漿.LpConstraint實(shí)例。

注:也有可能與豐富的比較方法來(lái)構(gòu)建的約束.__eq__(),.__le__()以及.__ge__()定義了運(yùn)營(yíng)商的行為==,=。

考慮到這一點(diǎn),下一步是創(chuàng)建約束和目標(biāo)函數(shù)并將它們分配給您的模型。您不需要?jiǎng)?chuàng)建列表或矩陣。只需編寫(xiě) Python 表達(dá)式并使用+=運(yùn)算符將它們附加到模型中:

在上面的代碼中,您定義了包含約束及其名稱(chēng)的元組。LpProblem允許您通過(guò)將約束指定為元組來(lái)向模型添加約束。第一個(gè)元素是一個(gè)LpConstraint實(shí)例。第二個(gè)元素是該約束的可讀名稱(chēng)。

設(shè)置目標(biāo)函數(shù)非常相似:

或者,您可以使用更短的符號(hào):

現(xiàn)在您已經(jīng)添加了目標(biāo)函數(shù)并定義了模型。

注意:您可以使用運(yùn)算符將 約束或目標(biāo)附加到模型中,+=因?yàn)樗念?lèi)LpProblem實(shí)現(xiàn)了特殊方法.__iadd__(),該方法用于指定 的行為+=。

對(duì)于較大的問(wèn)題,lpSum()與列表或其他序列一起使用通常比重復(fù)+運(yùn)算符更方便。例如,您可以使用以下語(yǔ)句將目標(biāo)函數(shù)添加到模型中:

它產(chǎn)生與前一條語(yǔ)句相同的結(jié)果。

您現(xiàn)在可以看到此模型的完整定義:

模型的字符串表示包含所有相關(guān)數(shù)據(jù):變量、約束、目標(biāo)及其名稱(chēng)。

注意:字符串表示是通過(guò)定義特殊方法構(gòu)建的.__repr__()。有關(guān) 的更多詳細(xì)信息.__repr__(),請(qǐng)查看Pythonic OOP 字符串轉(zhuǎn)換:__repr__vs__str__ .

最后,您已準(zhǔn)備好解決問(wèn)題。你可以通過(guò)調(diào)用.solve()你的模型對(duì)象來(lái)做到這一點(diǎn)。如果要使用默認(rèn)求解器 (CBC),則不需要傳遞任何參數(shù):

.solve()調(diào)用底層求解器,修改model對(duì)象,并返回解決方案的整數(shù)狀態(tài),1如果找到了最優(yōu)解。有關(guān)其余狀態(tài)代碼,請(qǐng)參閱LpStatus[]。

你可以得到優(yōu)化結(jié)果作為 的屬性model。該函數(shù)value()和相應(yīng)的方法.value()返回屬性的實(shí)際值:

model.objective持有目標(biāo)函數(shù)model.constraints的值,包含松弛變量的值,以及對(duì)象x和y具有決策變量的最優(yōu)值。model.variables()返回一個(gè)包含決策變量的列表:

如您所見(jiàn),此列表包含使用 的構(gòu)造函數(shù)創(chuàng)建的確切對(duì)象LpVariable。

結(jié)果與您使用 SciPy 獲得的結(jié)果大致相同。

注意:注意這個(gè)方法.solve()——它會(huì)改變對(duì)象的狀態(tài),x并且y!

您可以通過(guò)調(diào)用查看使用了哪個(gè)求解器.solver:

輸出通知您求解器是 CBC。您沒(méi)有指定求解器,因此 PuLP 調(diào)用了默認(rèn)求解器。

如果要運(yùn)行不同的求解器,則可以將其指定為 的參數(shù).solve()。例如,如果您想使用 GLPK 并且已經(jīng)安裝了它,那么您可以solver=GLPK(msg=False)在最后一行使用。請(qǐng)記住,您還需要導(dǎo)入它:

現(xiàn)在你已經(jīng)導(dǎo)入了 GLPK,你可以在里面使用它.solve():

該msg參數(shù)用于顯示來(lái)自求解器的信息。msg=False禁用顯示此信息。如果要包含信息,則只需省略msg或設(shè)置msg=True。

您的模型已定義并求解,因此您可以按照與前一種情況相同的方式檢查結(jié)果:

使用 GLPK 得到的結(jié)果與使用 SciPy 和 CBC 得到的結(jié)果幾乎相同。

一起來(lái)看看這次用的是哪個(gè)求解器:

正如您在上面用突出顯示的語(yǔ)句定義的那樣model.solve(solver=GLPK(msg=False)),求解器是 GLPK。

您還可以使用 PuLP 來(lái)解決混合整數(shù)線(xiàn)性規(guī)劃問(wèn)題。要定義整數(shù)或二進(jìn)制變量,只需傳遞cat="Integer"或cat="Binary"到LpVariable。其他一切都保持不變:

在本例中,您有一個(gè)整數(shù)變量并獲得與之前不同的結(jié)果:

Nowx是一個(gè)整數(shù),如模型中所指定。(從技術(shù)上講,它保存一個(gè)小數(shù)點(diǎn)后為零的浮點(diǎn)值。)這一事實(shí)改變了整個(gè)解決方案。讓我們?cè)趫D表上展示這一點(diǎn):

如您所見(jiàn),最佳解決方案是灰色背景上最右邊的綠點(diǎn)。這是兩者的最大價(jià)值的可行的解決方案x和y,給它的最大目標(biāo)函數(shù)值。

GLPK 也能夠解決此類(lèi)問(wèn)題。

現(xiàn)在你可以使用 PuLP 來(lái)解決上面的資源分配問(wèn)題:

定義和解決問(wèn)題的方法與前面的示例相同:

在這種情況下,您使用字典 x來(lái)存儲(chǔ)所有決策變量。這種方法很方便,因?yàn)樽值淇梢詫Q策變量的名稱(chēng)或索引存儲(chǔ)為鍵,將相應(yīng)的LpVariable對(duì)象存儲(chǔ)為值。列表或元組的LpVariable實(shí)例可以是有用的。

上面的代碼產(chǎn)生以下結(jié)果:

如您所見(jiàn),該解決方案與使用 SciPy 獲得的解決方案一致。最有利可圖的解決方案是每天生產(chǎn)5.0第一件產(chǎn)品和45.0第三件產(chǎn)品。

讓我們把這個(gè)問(wèn)題變得更復(fù)雜和有趣。假設(shè)由于機(jī)器問(wèn)題,工廠(chǎng)無(wú)法同時(shí)生產(chǎn)第一種和第三種產(chǎn)品。在這種情況下,最有利可圖的解決方案是什么?

現(xiàn)在您有另一個(gè)邏輯約束:如果x ? 為正數(shù),則x ? 必須為零,反之亦然。這是二元決策變量非常有用的地方。您將使用兩個(gè)二元決策變量y ? 和y ?,它們將表示是否生成了第一個(gè)或第三個(gè)產(chǎn)品:

除了突出顯示的行之外,代碼與前面的示例非常相似。以下是差異:

這是解決方案:

事實(shí)證明,最佳方法是排除第一種產(chǎn)品而只生產(chǎn)第三種產(chǎn)品。

就像有許多資源可以幫助您學(xué)習(xí)線(xiàn)性規(guī)劃和混合整數(shù)線(xiàn)性規(guī)劃一樣,還有許多具有 Python 包裝器的求解器可用。這是部分列表:

其中一些庫(kù),如 Gurobi,包括他們自己的 Python 包裝器。其他人使用外部包裝器。例如,您看到可以使用 PuLP 訪(fǎng)問(wèn) CBC 和 GLPK。

您現(xiàn)在知道什么是線(xiàn)性規(guī)劃以及如何使用 Python 解決線(xiàn)性規(guī)劃問(wèn)題。您還了解到 Python 線(xiàn)性編程庫(kù)只是本機(jī)求解器的包裝器。當(dāng)求解器完成其工作時(shí),包裝器返回解決方案狀態(tài)、決策變量值、松弛變量、目標(biāo)函數(shù)等。

python 函數(shù)問(wèn)題?

要點(diǎn):input輸入的內(nèi)容為字符串。

.isdigit用于判定輸入的字符串中的字符是否為數(shù)值型字符,注意是“數(shù)值型字符”,仍然是字符串。因此想要與數(shù)值1、2、3進(jìn)行比較,必須加步int(instr),將字符串轉(zhuǎn)換為數(shù)值。這就解釋了你的第2第3個(gè)問(wèn)題,再看一下第一個(gè)問(wèn)題:刪掉該段后,instr是原始的輸入的字符串,與數(shù)值1或2進(jìn)行相等比較,返回值為False,不運(yùn)行if內(nèi)的語(yǔ)句,直接返回while循環(huán)。

python怎么做數(shù)學(xué)函數(shù)題

【相關(guān)學(xué)習(xí)推薦:python教程】

python做數(shù)學(xué)函數(shù)題的方法:

1、打開(kāi)CMD命令行以后我們先來(lái)看一個(gè)求平方的函數(shù),如下圖所示,用pow即可計(jì)算某個(gè)數(shù)的幾次方

2、接下來(lái)我們可以運(yùn)用abs函數(shù)來(lái)求某一個(gè)數(shù)的絕對(duì)值,如下圖所示

3、在遇到小數(shù)的時(shí)候,我們經(jīng)常需要舍棄小數(shù)的部分直接用整數(shù),那么就可以用floor函數(shù)了,但是直接用的話(huà)是報(bào)錯(cuò)的,如下圖所示

4、這個(gè)時(shí)候我們需要導(dǎo)入math模塊,因?yàn)閒loor函數(shù)在math模塊中,如下圖所示

5、接下來(lái)我們還會(huì)用到math函數(shù)中的開(kāi)平方根的函數(shù)sqrt,如下圖所示

6、最后我們?cè)趹?yīng)用數(shù)學(xué)函數(shù)的時(shí)候可以直接將起賦值給某個(gè)變量,然后直接調(diào)用該變量即可,如下圖所示

如何用python解題?(急求)

import?turtle,?math

def?pic(x0,?y0,?x1,?y1):

dis?=?int(math.sqrt((x0?-?x1)?**?2?+?(y0?-?y1)?**?2))

turtle.hideturtle()

turtle.up()

turtle.goto(x0,?y0)

turtle.down()

turtle.goto(x1,?y1)

turtle.left(math.atan2(y1?-?y0,?x1?-?x0)?/?math.pi?*?180)

turtle.up()

turtle.backward(dis?/?2)

turtle.write('長(zhǎng)度為:%s'?%?dis,?align='left')

turtle.done()

def?palin():

k?=?[]

total?=?[]

for?i?in?range(10,?200000):

while?i??0:

k.append(i?%?10)

i?=?i?//?10

for?m?in?range(len(k)?//?2):

if?k[m]?!=?k[len(k)?-?m?-?1]:

break

else:

print(k)

total.append(k)

k?=?[]

print(len(total))

if?__name__?==?'__main__':

x0?=?int(input('輸入A的橫坐標(biāo):'))

y0?=?int(input('輸入A的縱坐標(biāo):'))

x1?=?int(input('輸入B的橫坐標(biāo):'))

y1?=?int(input('輸入B的縱坐標(biāo):'))

pic(x0,?y0,?x1,?y1)

palin()

我把這兩個(gè)放在一個(gè)主函數(shù)里運(yùn)行了

python遺傳算法目標(biāo)函數(shù)怎么編

一、遺傳算法介紹

遺傳算法是通過(guò)模擬大自然中生物進(jìn)化的歷程,來(lái)解決問(wèn)題的。大自然中一個(gè)種群經(jīng)歷過(guò)若干代的自然選擇后,剩下的種群必定是適應(yīng)環(huán)境的。把一個(gè)問(wèn)題所有的解看做一個(gè)種群,經(jīng)歷過(guò)若干次的自然選擇以后,剩下的解中是有問(wèn)題的最優(yōu)解的。當(dāng)然,只能說(shuō)有最優(yōu)解的概率很大。這里,我們用遺傳算法求一個(gè)函數(shù)的最大值。

f(x) = 10 * sin( 5x ) + 7 * cos( 4x ), 0 = x = 10

1、將自變量x進(jìn)行編碼

取基因片段的長(zhǎng)度為10, 則10位二進(jìn)制位可以表示的范圍是0到1023。基因與自變量轉(zhuǎn)變的公式是x = b2d(individual) * 10 / 1023。構(gòu)造初始的種群pop。每個(gè)個(gè)體的基因初始值是[0, 1, 0, 1, 0, 1, 0, 1, 0, 1]

2、計(jì)算目標(biāo)函數(shù)值

根據(jù)自變量與基因的轉(zhuǎn)化關(guān)系式,求出每個(gè)個(gè)體的基因?qū)?yīng)的自變量,然后將自變量代入函數(shù)f(x),求出每個(gè)個(gè)體的目標(biāo)函數(shù)值。

3、適應(yīng)度函數(shù)

適應(yīng)度函數(shù)是用來(lái)評(píng)估個(gè)體適應(yīng)環(huán)境的能力,是進(jìn)行自然選擇的依據(jù)。本題的適應(yīng)度函數(shù)直接將目標(biāo)函數(shù)值中的負(fù)值變成0. 因?yàn)槲覀兦蟮氖亲畲笾担砸鼓繕?biāo)函數(shù)值是負(fù)數(shù)的個(gè)體不適應(yīng)環(huán)境,使其繁殖后代的能力為0.適應(yīng)度函數(shù)的作用將在自然選擇中體現(xiàn)。

4、自然選擇

自然選擇的思想不再贅述,操作使用輪盤(pán)賭算法。其具體步驟:

假設(shè)種群中共5個(gè)個(gè)體,適應(yīng)度函數(shù)計(jì)算出來(lái)的個(gè)體適應(yīng)性列表是fitvalue = [1 ,3, 0, 2, 4] ,totalvalue = 10 , 如果將fitvalue畫(huà)到圓盤(pán)上,值的大小表示在圓盤(pán)上的面積。在轉(zhuǎn)動(dòng)輪盤(pán)的過(guò)程中,單個(gè)模塊的面積越大則被選中的概率越大。選擇的方法是將fitvalue轉(zhuǎn)化為[1 , 4 ,4 , 6 ,10], fitvalue / totalvalue = [0.1 , 0.4 , 0.4 , 0.6 , 1.0] . 然后產(chǎn)生5個(gè)0-1之間的隨機(jī)數(shù),將隨機(jī)數(shù)從小到大排序,假如是[0.05 , 0.2 , 0.7 , 0.8 ,0.9],則將0號(hào)個(gè)體、1號(hào)個(gè)體、4號(hào)個(gè)體、4號(hào)個(gè)體、4號(hào)個(gè)體拷貝到新種群中。自然選擇的結(jié)果使種群更符合條件了。

5、繁殖

假設(shè)個(gè)體a、b的基因是

a = [1, 0, 0, 0, 0, 1, 1, 1, 0, 0]

b = [0, 0, 0, 1, 1, 0, 1, 1, 1, 1]

這兩個(gè)個(gè)體發(fā)生基因交換的概率pc = 0.6.如果要發(fā)生基因交換,則產(chǎn)生一個(gè)隨機(jī)數(shù)point表示基因交換的位置,假設(shè)point = 4,則:

a = [1, 0, 0, 0, 0, 1, 1, 1, 0, 0]

b = [0, 0, 0, 1, 1, 0, 1, 1, 1, 1]

交換后為:

a = [1, 0, 0, 0, 1, 0, 1, 1, 1, 1]

b = [0, 0, 0, 1, 0, 1, 1, 1, 0, 0]

6、突變

遍歷每一個(gè)個(gè)體,基因的每一位發(fā)生突變(0變?yōu)?,1變?yōu)?)的概率為0.001.突變可以增加解空間

二、代碼

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

def b2d(b): #將二進(jìn)制轉(zhuǎn)化為十進(jìn)制 x∈[0,10] t = 0 for j in range(len(b)): t += b[j] * (math.pow(2, j)) t = t * 10 / 1023 return tpopsize = 50 #種群的大小#用遺傳算法求函數(shù)最大值:#f(x)=10*sin(5x)+7*cos(4x) x∈[0,10]chromlength = 10 #基因片段的長(zhǎng)度pc = 0.6 #兩個(gè)個(gè)體交叉的概率pm = 0.001; #基因突變的概率results = [[]]bestindividual = []bestfit = 0fitvalue = []tempop = [[]]pop = [[0, 1, 0, 1, 0, 1, 0, 1, 0, 1] for i in range(popsize)]for i in range(100): #繁殖100代 objvalue = calobjvalue(pop) #計(jì)算目標(biāo)函數(shù)值 fitvalue = calfitvalue(objvalue); #計(jì)算個(gè)體的適應(yīng)值 [bestindividual, bestfit] = best(pop, fitvalue) #選出最好的個(gè)體和最好的函數(shù)值 results.append([bestfit,b2d(bestindividual)]) #每次繁殖,將最好的結(jié)果記錄下來(lái) selection(pop, fitvalue) #自然選擇,淘汰掉一部分適應(yīng)性低的個(gè)體 crossover(pop, pc) #交叉繁殖 mutation(pop, pc) #基因突變 results.sort() print(results[-1]) #打印函數(shù)最大值和對(duì)應(yīng)的

來(lái)自CODE的代碼片

GA.py

1

2

3

4

5

6

7

8

9

def best(pop, fitvalue): #找出適應(yīng)函數(shù)值中最大值,和對(duì)應(yīng)的個(gè)體 px = len(pop) bestindividual = [] bestfit = fitvalue[0] for i in range(1,px): if(fitvalue[i] bestfit): bestfit = fitvalue[i] bestindividual = pop[i] return [bestindividual, bestfit]

來(lái)自CODE的代碼片

best.py

1

2

3

4

5

6

7

8

9

10

11

def calfitvalue(objvalue):#轉(zhuǎn)化為適應(yīng)值,目標(biāo)函數(shù)值越大越好,負(fù)值淘汰。 fitvalue = [] temp = 0.0 Cmin = 0; for i in range(len(objvalue)): if(objvalue[i] + Cmin 0): temp = Cmin + objvalue[i] else: temp = 0.0 fitvalue.append(temp) return fitvalue

來(lái)自CODE的代碼片

calfitvalue.py

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

import mathdef decodechrom(pop): #將種群的二進(jìn)制基因轉(zhuǎn)化為十進(jìn)制(0,1023) temp = []; for i in range(len(pop)): t = 0; for j in range(10): t += pop[i][j] * (math.pow(2, j)) temp.append(t) return tempdef calobjvalue(pop): #計(jì)算目標(biāo)函數(shù)值 temp1 = []; objvalue = []; temp1 = decodechrom(pop) for i in range(len(temp1)): x = temp1[i] * 10 / 1023 #(0,1023)轉(zhuǎn)化為 (0,10) objvalue.append(10 * math.sin(5 * x) + 7 * math.cos(4 * x)) return objvalue #目標(biāo)函數(shù)值objvalue[m] 與個(gè)體基因 pop[m] 對(duì)應(yīng)

來(lái)自CODE的代碼片

calobjvalue.py

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

import randomdef crossover(pop, pc): #個(gè)體間交叉,實(shí)現(xiàn)基因交換 poplen = len(pop) for i in range(poplen - 1): if(random.random() pc): cpoint = random.randint(0,len(pop[0])) temp1 = [] temp2 = [] temp1.extend(pop[i][0 : cpoint]) temp1.extend(pop[i+1][cpoint : len(pop[i])]) temp2.extend(pop[i+1][0 : cpoint]) temp2.extend(pop[i][cpoint : len(pop[i])]) pop[i] = temp1 pop[i+1] = temp2

來(lái)自CODE的代碼片

crossover.py

1

2

3

4

5

6

7

8

9

10

11

12

13

import randomdef mutation(pop, pm): #基因突變 px = len(pop) py = len(pop[0]) for i in range(px): if(random.random() pm): mpoint = random.randint(0,py-1) if(pop[i][mpoint] == 1): pop[i][mpoint] = 0 else: pop[i][mpoint] = 1

來(lái)自CODE的代碼片

mutation.py

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

import randomdef sum(fitvalue): total = 0 for i in range(len(fitvalue)): total += fitvalue[i] return totaldef cumsum(fitvalue): for i in range(len(fitvalue)): t = 0; j = 0; while(j = i): t += fitvalue[j] j = j + 1 fitvalue[i] = t;def selection(pop, fitvalue): #自然選擇(輪盤(pán)賭算法) newfitvalue = [] totalfit = sum(fitvalue) for i in range(len(fitvalue)): newfitvalue.append(fitvalue[i] / totalfit) cumsum(newfitvalue) ms = []; poplen = len(pop) for i in range(poplen): ms.append(random.random()) #random float list ms ms.sort() fitin = 0 newin = 0 newpop = pop while newin poplen: if(ms[newin] newfitvalue[fitin]): newpop[newin] = pop[fitin] newin = newin + 1 else: fitin = fitin + 1 pop = newpop

網(wǎng)站欄目:python目標(biāo)函數(shù)解題 Python函數(shù)題目
分享鏈接:http://www.js-pz168.com/article34/hhcese.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google網(wǎng)站維護(hù)服務(wù)器托管云服務(wù)器面包屑導(dǎo)航網(wǎng)站策劃

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

微信小程序開(kāi)發(fā)
久久99久久人婷婷精品综合_超碰aⅴ人人做人人爽欧美_亚洲电影第三页_日韩欧美一中文字暮专区_波多野结衣的一区二区三区_婷婷在线播放_人人视频精品_国产精品日韩精品欧美精品_亚洲免费黄色_欧美性猛交xxxxxxxx
欧美电视剧在线观看完整版| 亚洲综合一区二区三区| 亚洲小说欧美激情另类| 玖玖九九国产精品| 91麻豆国产香蕉久久精品| 欧美日韩国产综合在线| 欧美日韩在线免费视频| 欧美激情一区在线观看| 亚洲成人精品一区二区| 成人小视频在线观看| 日本一区免费| 91精品国产综合久久久久久| 亚洲欧美怡红院| 久久99国产精品麻豆| 国产成人精品一区二区三区福利| 一区在线电影| 久久久国产午夜精品| 日韩电影一区二区三区四区| 99久久精品国产导航| 亚洲视频精品一区| 精品播放一区二区| 丝袜亚洲另类欧美| 97人人做人人人难人人做| 日本精品一区二区三区四区的功能| 久久久国产精品不卡| 青青草成人在线观看| 国产富婆一区二区三区| 欧美日韩亚洲国产综合| 亚洲丝袜另类动漫二区| 国产精品一品视频| 日韩精品一线二线三线| 精品国产乱码久久久久久久久| 午夜精品久久久久久久久| 97aⅴ精品视频一二三区| 色久优优欧美色久优优| 中文字幕一区二区三区在线播放 | 亚洲精品国产精品国自产| 久久亚洲春色中文字幕久久久| 日本伊人色综合网| 精品日本一区二区三区在线观看| 91精品国产欧美一区二区18| 亚洲成人免费观看| 国产精品国产精品国产专区蜜臀ah | 国产麻豆精品在线| 五月天久久狠狠| 欧美国产激情一区二区三区蜜月| 韩国v欧美v日本v亚洲v| 天堂一区二区三区| 中文字幕国产一区| 粉嫩aⅴ一区二区三区四区| 一区二区三区四区五区精品| 国产精品视频一二三| 国产成人亚洲精品青草天美| 曰韩不卡视频| 亚洲三级在线免费观看| 91小视频在线观看| 欧美另类变人与禽xxxxx| 亚洲国产精品久久人人爱蜜臀| 成人精品水蜜桃| 日韩欧美中文字幕精品| 另类小说一区二区三区| 日韩在线三区| 国产精品剧情在线亚洲| 本田岬高潮一区二区三区| 欧美人动与zoxxxx乱| 日韩电影免费一区| 日本亚洲自拍| 中文字幕亚洲视频| caoporen国产精品| 精品捆绑美女sm三区| 国内欧美视频一区二区| 色偷偷久久人人79超碰人人澡| 一区二区三区色| 精品乱码一区二区三区| 久久精品日韩一区二区三区| 成人一二三区视频| 欧美二区乱c少妇| 看片的网站亚洲| 正义之心1992免费观看全集完整版| 最近日韩中文字幕| 成人情视频高清免费观看电影| 精品伦理精品一区| 国产91精品精华液一区二区三区| 欧美日韩综合一区| 日本最新不卡在线| 亚洲欧洲精品在线| 亚洲一区二区视频在线观看| 麻豆精品传媒视频| 自拍偷拍欧美精品| 国内精品二区| 中文字幕第一页久久| 91久久偷偷做嫩草影院| 精品人伦一区二区色婷婷| 国产成人av电影在线观看| 在线不卡一区二区| 国产一区二三区| 欧美另类z0zxhd电影| 国产综合久久久久久鬼色| 欧美日韩五月天| 精品一区二区三区影院在线午夜 | 久久99精品久久久久久久青青日本 | 91国内精品野花午夜精品 | 国产成人免费在线| 欧美一区三区四区| 国产成人三级在线观看| 日韩限制级电影在线观看| 国产伦精一区二区三区| 3d动漫精品啪啪| 国产成人精品免费一区二区| 日韩一区二区在线免费观看| 丁香激情综合五月| 亚洲精品一线二线三线| 91在线观看一区二区| 国产欧美日韩在线| 国产欧美欧洲| 亚洲裸体xxx| 五码日韩精品一区二区三区视频| 亚洲国产日韩av| 色欲综合视频天天天| 美女视频黄a大片欧美| 欧美日韩国产片| 成人中文字幕在线| 久久一区二区三区四区| 国产精品v欧美精品v日韩| 日韩理论片一区二区| 日韩av电影免费观看| 日韩在线a电影| 欧美在线制服丝袜| 韩国欧美国产一区| 精品欧美一区二区久久| 国产99在线免费| 亚洲美女免费在线| 中文字幕成人一区| 国产一区啦啦啦在线观看| 精品卡一卡二卡三卡四在线| av色综合网| 亚洲免费色视频| 色乱码一区二区三区88| 国产盗摄一区二区三区| 久久精品在线免费观看| 久久久免费看| 污片在线观看一区二区| 欧美日韩成人在线| 51国偷自产一区二区三区的来源| 1区2区3区国产精品| 亚洲永久激情精品| 国产精品一区二区免费不卡| 国产亚洲成aⅴ人片在线观看 | 亚洲欧美在线aaa| 在线不卡日本| 国产91在线看| 国产精品免费观看视频| 亚洲精品在线免费| 国产精品99久久久久| 国产欧美一区二区三区沐欲| 欧洲久久久久久| 久久成人精品无人区| 久久午夜色播影院免费高清 | 欧美影院午夜播放| 99re66热这里只有精品3直播 | 久久综合九色欧美综合狠狠| 快播日韩欧美| 久久 天天综合| 国产午夜亚洲精品午夜鲁丝片| 日韩欧美激情一区二区| 国产一区二区精品久久| 欧美激情资源网| 一区二区视频在线观看| 成人手机在线视频| 亚洲女同ⅹxx女同tv| 欧美日韩在线免费视频| 91青青草免费在线看| 性做久久久久久免费观看欧美| 欧美一区二区不卡视频| 久久精品丝袜高跟鞋| 久久精品999| 国产精品欧美一级免费| 最新日韩三级| 147欧美人体大胆444| 日韩精品色哟哟| 久久只精品国产| 艳色歌舞团一区二区三区| 不卡视频在线观看| 亚洲国产精品久久一线不卡| 日韩免费一区二区| 欧美一区二区三区电影在线观看| 国产乱码精品一区二区三区av| 亚洲欧美在线视频| 欧美高清一级片在线| 久久99精品久久久久久水蜜桃| 精品一二三四区| 亚洲欧美自拍偷拍| 欧美日本在线播放| 噜噜噜噜噜久久久久久91| 国产精品一二一区| 亚洲综合色在线| 精品少妇一区二区三区日产乱码| 视频一区二区三区在线观看| 成人a级免费电影| 视频一区二区中文字幕|