導航:首頁 > 編程知識 > 線性編程哪個好

線性編程哪個好

發布時間:2023-04-16 14:05:53

⑴ 學習哪個編程軟體最好

你好、我來為你解答:
你好,很高興能回答你的問題,我給你說說以下幾種吧,各有利弊,個人還是覺得vc6.0初學較好,希望對你有幫助
果你是剛剛學,其實wintc是款很不錯的軟體。去用一下你就知道了,因為我自學c時就是用的那個軟體,真的向你推薦它!
推薦使用VC++6.0中文版 因為國家考試用的就是那個 當然了還有Turbo C這個也是以前國家考試用的 但是這些版本很老了 而且沒有現在的方便 比如你遇到了問題想去咨詢下別人 老版本的尤其是比較經典的turbo c2.0的 你需要把原來的代碼在寫一遍才行 而Visusl C++6.0的則可以用滑鼠進行復制操作 很是快捷
而且VC還有自動用不同的顏色來顯示不同類型的代碼 對初學者來說 是個很好的糾錯功能
比如你的關鍵字打錯了 顏色是會變的
因為dev本身存在許多缺陷,反而使你能擁有更好的習慣,等到你用dev可以駕馭難題的時候,你會覺得其它軟體強大的調試功能根本就是多餘的

TC++對C++標准支持的是一塌糊塗,而VS2005(VC8)和DEV-C++(GCC)可以幾乎完美的支持C++標准.
過時的不是C語言,而是TC所提供的C語言。TC是幾十年前的了,在這段時間里,C語言變了變了又變了。而且TC存在的對一些非標準的容忍,就如同現在社會上行業中的「潛規則」一樣,或許會給人方便,但是如果不打算在圈內混(一直用TC),還是別學這些「潛規則」比較好。C/C++程序設計學習與實驗系統 2011.4[下載地址]
原名《Turbo C/C++ for Windows 集成實驗與學習環境》,現在已支持最新操作系統WINDOWS 7,它是從事一線教學的大學教師根據多媒體教學演示和C語言初學者的特點,量身打造的一個簡單易用的C/C++程序設計教學演示、學習與實驗軟體(支持TC2/TC3、VC6三種編譯器,沒有使用日期限制)。與軟體配套的《 C/C++程序設計教程(配有同步實驗、流程式控制制語句動畫演示、提供教程中所有程序實例、實驗、作業中的源代碼(全部用VC6編譯器調試通過))》融入了作者多年的教學和學習經驗、編程建議、編程感悟,新增讀書筆記功能有利用戶 記錄教程中的重點、難點、學習心得體會,針對用戶學習教程中遇到的問題開通了疑難問題解答論壇等,同時,為了便於C語言學習,加入C語言學習指導、入門程序實例、典型源程序、典型的函數演算法,課程設計指導、課程設計源程序、 Visual C++6.0中英文編譯錯誤信息同步顯示功能(並配有60多種同步的語法錯誤程序實例、修改方法等)、 Turbo C2.0 中英文編譯錯誤信息同步顯示功能、Turbo C++3.0常見編譯錯誤信息、C語言專業詞彙的中英文對照、2004年到2011年13套全國計算機等級考試二級 C 語言的真題筆試試卷及答案和10套上機模擬試題和詳盡的答案與分析等大量的學習資源。另外 「編程日記」 功能可以讓你記錄你的 C 語言學習歷程, 「資料管理」 功能讓你大量的下載資料不再難找

⑵ 新手如何學習plc編程

PLC編程入門要一個月時間。

PLC編程專為在工業環境下應用而設計。它採用可編程序的存儲器,用來在其內部存儲執行邏輯運算、順序控制、定時、計數和算術運算等操作的指令,並通過數字式、模擬式的輸入和輸出,控制各種類型的機械或生產過程。

可編程序控制器及其有關設備,都應按易於使工業控制系統形成一個整體,易於擴充其功能的原則設計。

在PLC運行時,CPU根據用戶按控制要求編制好並存於用戶存儲器中的程序,按指令步序號(或地址號)作周期性循環掃描,如無跳轉指令,則從第一條指令開始逐條順序執行用戶程序,直至程序結束,然後重新返回第一條指令,開始下一輪新的掃描,在每次掃描過程中,還要完成對輸入信號的采樣和對輸出狀態的刷新等工作。

PLC的一個掃描周期必經輸入采樣、程序執行和輸出刷新三個階段,PLC在輸入采樣階段:首先以掃描方式按順序將所有暫存在輸入鎖存器中的輸入端子的通斷狀態或輸入

⑶ MATLAB安裝哪個版本較好

最新版的,前提是電腦配置頂得住。

很多人不知道,其實一台電腦是可以安裝多個版本的MATLAB,至少6個是沒問題的。

1、MATLAB一年發布幾個版本

MATLAB一年出兩個版本:[當年的年份+a]和[當年的年份+b],印象中大概是4月發布a版本,10月發布b版本。

比如,2020年發布的2個版本是MATLAB R2020a和MATLAB R2020b。 下一版的MATLAB往往比上一版強大很多,提供很多新功能和新工具

為啥?因為MathWorks全球開發人員有上千個,上千開發人員每半年哼次哼次開發的成果絕對夠你喝一壺的。基本上,你學習的速度是很難跟不上MATLAB更新換代的速度的。

2、a版本和b版本有什麼區別

關於這個問題,我之前用b版本相對多一些,感覺b版本比a版本更成熟、穩定一些。也就這個問題,專門請教過MathWorks中國工作人員,TA的回復是:a版和b版沒什麼區別,a版並非試用版或相對不穩定的版本。

3、試用版可以體驗下

但最好別用它做項目 MATLAB在發布新版本之前,往往會提供試用版,用戶可以申請體驗使用。

我們公司因為和MathWorks有比較好的合作關系,所以有機會體驗超前的試用版。比如現在正式發布的最新的MATLAB版本是R2020b,但我們在幾個月前就拿到了試用版的MATLAB R2021a。

試用版可以讓你超前體驗MATLAB新功能,甚至可以給MathWorks開發人員反饋一些開發建議。不過畢竟不是成熟版本,最終正式發布的也許與試用版會有一定出入,所以做項目時謹慎使用。

⑷ 微積分線性規劃哪個對學習編程有用

我是數學系畢業,之後從java程序員開始做的,我來說說我的想法吧。由於我做的是ERP軟體這一塊,所以其實用到微積分的幾乎沒有,做了2年程序員以後,開始轉做實施看看,發現線性規劃還是比較有用的,因為在生產系統,計劃系統這樣的模塊中,很多地方其實是可以用線性規劃去進行最優化計算,並且目前的ERP軟體中,是幾乎沒有這一塊的。所以可以好好的發展一下,讓軟體中可以含有更多的科學技術,而不是簡單的對數據進行羅列。
樓主問微積分和線性規劃那個對學習編程有用,其實學習編程的過程不需要用到這兩門學科,但是你往這個方向發展,可以考慮一下線性規劃對你以後實際遇到的業務有哪些幫助。另外有兩點小的建議:
第一,如果樓主想學習線性規劃,可以考慮不局限於現行規劃,整數規劃,非線性規劃,二次規劃,多目標規劃,圖與網路的優化,以及一些現在比較流行的遺傳演算法,退火演算法,神經網路演算法,都可以去研究,畢竟現實中的問題並絕大多數不是線性規劃。
第二,樓主如果想往編程的技術上發展,其實和這門學科沒多大交集,但是如果向產品經理或者咨詢,售前,這些偏業務的方向發展可以更好的和你所希望學習的最優化演算法結合。
以上都是個人經歷和見解,希望對樓主有幫助。

⑸ PLC編程培訓在北京哪裡學好

你好,在北京培訓plc可以看下技成,三菱、歐姆龍、西門子PLC全系列編程學習。
plc培訓的費用是多少
PLC培訓費用一般在880-6800的價格。 如果學習全套工業機器人精英課程,費用可能在10000左右,大致費用基本相同。 但想要更好地進入這個行業,前期的努力是必不可少的。 價格不能作為決策的所有因素。 一定要先了解一下這家培訓機構,然後再聽聽看能不能跟得上。 老師的節奏,能不能在這個培訓機構學到自己想要的東西,那都是值得的。
如何才能學好plc技術呢?滿足以下3個條件:
1、最好能有電工基礎,沒有也沒關系。
2、plc有強烈的興趣。
3、動手實踐能力強,意思是「別懶」。

⑹ 女兒在華中科技大上大一感覺線性代數和C++不好學,哪位同學有好的建議

關於在大學里學習線性代數和C++感覺困亂局難,主要是不理解線性代數的概念和知識的邏輯性,編程與線性代數有關,因此導致感覺這兩門課程學習困嘩慎讓難。下面我告訴你學習方法。

四、將線性代數與編程思維相結合

線性代數有很多知知識與孝差計算機編程內容相對應,把兩個知識結合一起學習效率高。如向量可以與編程語言中的數組對應;矩陣與二維數組對應。

⑺ 有哪些好的app數據分析工具推薦嗎

有哪些好的app數據分析工具推薦嗎

未至科技魔方是一款大數據模型平台,是一款基於服務匯流排與分布式雲計算兩大技術架構的一款數據分析、挖掘的工具平台,其採用分布式文件系統對數據進行存儲,支持海量數據的處理。採用多種的數據採集技術,支持結構化數據及非結構化數據的採集。通過圖形化的模型搭建工具,支持流程化的模型配置。通過第三方插件技術,很容易將其他工具及服務集成到平台中去。數據分析研判平台就是海量信息的採集,數據模型的搭建,數據的挖掘、分析最後形成知識服務於實戰、服務於決策的過程,平台主要包括數據採集部分,模型配置部分,模型執行部分及成果展示部分等。

App數據分析,有沒有好的工具推薦?

方法/步驟
行業數據
行業數據對於一個APP來說,至關重要。了解行業數據,可以知道自己的APP在整個行業的水平,可以從新增用戶、活躍用戶、啟動次數、使用時長等多個維度去對比自己產品與行業平均水平的差異以及自己產品的對應的指標在整個行業的排名,從而知道自己產品的不足之處。這種縱向的對比,會讓自己的產品定位、發展方向更加清晰。
評估渠道效果
在國內,獲取用戶的渠道是非常多的,如微博、微信、運營商商店、操作系統商店、應用商店、手機廠商預裝、CPA廣告、交叉推廣、限時免費等等。看一個APP的數據,首先要知道用戶從哪裡來,哪裡的用戶質量最高,這樣開發者就會面臨一個選擇和評估渠道的難問題。但是通過統計分析工具,開發者可以從多個維度的數據來對比不同渠道的效果,比如從新增用戶、活躍用戶、次日留存率、單次使用時長等角度對比不同來源的用戶,這樣就可以根據數據找到最適合自身的渠道,從而獲得最好的推廣效果。
用戶分析
產品吸引到用戶下載和使用之後,首先要知道的就是用戶是誰。所以,我們需要詳盡地了解到用戶的設備終端類型、網路及運營商、地域的分布特徵。這些數據可以幫助了解用戶的屬性,在產品改進以及產品推廣中,就可以充分利用這些數據制定精準的策略。
用戶行為分析
在關注完用戶的屬性後,我們還要高度關注用戶在應用內的行為,因為這些行為最終決定著產品所能夠帶來的價值。開發者可以通過設置自定義事件以及漏斗來關注應用內每一步的轉化率,以及轉化率對收入水平的影響。通過分析事件和漏斗數據,可以針對性的優化轉化率低的步驟,切實提高整體轉化水平。
5
產品受歡迎程度
在了解了用戶的行為之後,我們應該看一下自己的產品是否足夠受歡迎,這是一個應用保持生命力的根本。開發者可以從留存用戶、用戶參與度(使用時長、使用頻率、訪問頁面、使用間隔)等維度評價用戶粘度。進行數據對比分析的時候,要充分利用時間控制項和渠道控制項,可以對比不同時段不同渠道的用戶粘度,了解運營推廣手段對不同渠道的效果。
如果以上5點的數據都很漂亮,說明你的APP已經做得相當不錯了。當然,如果你的APP還沒有給你帶來收入,那麼你仍然有一段較長的路要走。

app日活數據分析工具有哪些?

app日活數據分析工具有上海風述科技的app先知。

APP運營數據分析工具有哪些?

目前國內發展不錯的可以監測web、app、流媒體等多種應用性能監測服務,叫「雲測寶」。

雲測試、友盟

雲測試主要為開發者提供自動化的移動APP測試,包括功能、UI、性能、穩定性、安全和競爭測試,返回包括日誌和截圖的詳細測試報告,支持iOS和Android兩大平台。
雲測寶主要通過分布全球真實網路中的真實終端,監測用戶訪問移動應用App、HTML5、移動Web的真實體驗數據,從最終用戶的視角跨越移動設備、網路和國家地區范圍,從移動「端」側對移動互聯網的「雲」服務性能進行監測與評估,使移動業務用戶所獲得體驗效果達到最大。
友盟是為中國開發者定製的靈活、簡單、免費、跨平台的移動應用統計分析工具。
三個產品從不同的

數據分析工具有哪些 python

IPython

IPython 是一個在多種編程語言之間進行交互計算的命令行 shell,最開始是用 python 開發的,提供增強的內省,富媒體,擴展的 shell
語法,tab 補全,豐富的歷史等功能。IPython 提供了如下特性:
更強的交互 shell(基於 Qt 的終端)
一個基於瀏覽器的記事本,支持代碼,純文本,數學公式,內置圖表和其他富媒體
支持交互數據可視化和圖形界面工具
靈活,可嵌入解釋器載入到任意一個自有工程里
簡單易用,用於並行計算的高性能工具
由數據分析總監,Galvanize 專家 Nir Kaldero 提供。

GraphLab Greate 是一個 Python 庫,由 C++ 引擎支持,可以快速構建大型高性能數據產品。
這有一些關於 GraphLab Greate 的特點:
可以在您的計算機上以交互的速度分析以 T 為計量單位的數據量。
在單一平台上可以分析表格數據、曲線、文字、圖像。
最新的機器學習演算法包括深度學習,進化樹和 factorization machines 理論。
可以用 Hadoop Yarn 或者 EC2 聚類在你的筆記本或者分布系統上運行同樣的代碼。
藉助於靈活的 API 函數專注於任務或者機器學習。
在雲上用預測服務便捷地配置數據產品。
為探索和產品監測創建可視化的數據。
由 Galvanize 數據科學家 Benjamin Skrainka 提供。
Pandas
pandas 是一個開源的軟體,它具有 BSD 的開源許可,為 Python
編程語言提供高性能,易用數據結構和數據分析工具。在數據改動和數據預處理方面,Python 早已名聲顯赫,但是在數據分析與建模方面,Python
是個短板。Pands 軟體就填補了這個空白,能讓你用 Python 方便地進行你所有數據的處理,而不用轉而選擇更主流的專業語言,例如 R 語言。
整合了勁爆的 IPyton 工具包和其他的庫,它在 Python 中進行數據分析的開發環境在處理性能,速度,和兼容方面都性能卓越。Pands
不會執行重要的建模函數超出線性回歸和面板回歸;對於這些,參考 stat *** odel 統計建模工具和 scikit-learn 庫。為了把 Python
打造成頂級的統計建模分析環境,我們需要進一步努力,但是我們已經奮斗在這條路上了。
由 Galvanize 專家,數據科學家 Nir Kaldero 提供。
PuLP
線性編程是一種優化,其中一個對象函數被最大程度地限制了。PuLP 是一個用 Python
編寫的線性編程模型。它能產生線性文件,能調用高度優化的求解器,GLPK,COIN CLP/CBC,CPLEX,和GUROBI,來求解這些線性問題。
由 Galvanize 數據科學家 Isaac Laughlin 提供
Matplotlib

matplotlib 是基於 Python 的
2D(數據)繪圖庫,它產生(輸出)出版級質量的圖表,用於各種列印紙質的原件格式和跨平台的互動式環境。matplotlib 既可以用在 python 腳本,
python 和 ipython 的 shell 界面 (ala MATLAB? 或 Mathematica?),web 應用伺服器,和6類 GUI
工具箱。
matplotlib 嘗試使容易事情變得更容易,使困難事情變為可能。你只需要少量幾行代碼,就可以生成圖表,直方圖,能量光譜(power
spectra),柱狀圖,errorcharts,散點圖(scatterplots)等,。
為簡化數據繪圖,pyplot 提供一個類 MATLAB 的介面界面,尤其是它與 IPython
共同使用時。對於高級用戶,你可以完全定製包括線型,字體屬性,坐標屬性等,藉助面向對象介面界面,或項 MATLAB 用戶提供類似(MATLAB)的界面。
Galvanize 公司的首席科學官 Mike Tamir 供稿。
Scikit-Learn

Scikit-Learn 是一個簡單有效地數據挖掘和數據分析工具(庫)。關於最值得一提的是,它人人可用,重復用於多種語境。它基於
NumPy,SciPy 和 mathplotlib 等構建。Scikit 採用開源的 BSD 授權協議,同時也可用於商業。Scikit-Learn
具備如下特性:
分類(Classification) – 識別鑒定一個對象屬於哪一類別
回歸(Regression) – 預測對象關聯的連續值屬性
聚類(Clustering) – 類似對象自動分組集合
降維(Dimensionality Rection) – 減少需要考慮的隨機變數數量
模型選擇(Model Selection) –比較、驗證和選擇參數和模型
預處理(Preprocessing) – 特徵提取和規范化
Galvanize 公司數據科學講師,Isaac Laughlin提供
Spark

Spark 由一個驅動程序構成,它運行用戶的 main 函數並在聚類上執行多個並行操作。Spark
最吸引人的地方在於它提供的彈性分布數據集(RDD),那是一個按照聚類的節點進行分區的元素的集合,它可以在並行計算中使用。RDDs 可以從一個 Hadoop
文件系統中的文件(或者其他的 Hadoop 支持的文件系統的文件)來創建,或者是驅動程序中其他的已經存在的標量數據集合,把它進行變換。用戶也許想要 Spark
在內存中永久保存 RDD,來通過並行操作有效地對 RDD 進行復用。最終,RDDs 無法從節點中自動復原。
Spark 中第二個吸引人的地方在並行操作中變數的共享。默認情況下,當 Spark
在並行情況下運行一個函數作為一組不同節點上的任務時,它把每一個函數中用到的變數拷貝一份送到每一任務。有時,一個變數需要被許多任務和驅動程序共享。Spark
支持兩種方式的共享變數:廣播變數,它可以用來在所有的節點上緩存數據。另一種方式是累加器,這是一種只能用作執行加法的變數,例如在計數器中和加法運算中。

有哪些微博數據分析工具可以推薦

有 在微博里搜索 微知 這個應用。。 可以分析一條微博 被什麼人轉發 有沒有水軍 這些

excel數據分析工具的有哪些

SQL
樓主說的工具指的是excel本身的嗎 還是指數據分析需要的啊

⑻ 萬字教你如何用 Python 實現線性規劃

想像一下,您有一個線性方程組和不等式系統。這樣的系統通常有許多可能的解決方案。線性規劃是一組數學和計算工具,可讓您找到該系統的特定解,該解對應於某些其他線性函數的最大值或最小值。

混合整數線性規劃是 線性規劃 的擴展。它處理至少一個變數採用離散整數而不是連續值的問題。盡管乍一看混合整數問題與連續變數問題相似,但它們在靈活性和精度方面具有顯著優勢。

整數變數對於正確表示自然用整數表示的數量很重要,例如生產的飛機數量或服務的客戶數量。

一種特別重要的整數變數是 二進制變數 。它只能取 的值,在做出是或否的決定時很有用,例如是否應該建造工廠或者是否應該打開或關閉機器。您還可以使用它們來模擬邏輯約束。

線性規劃是一種基本的優化技術,已在科學和數學密集型領域使用了數十年。它精確、相對快速,適用於一系列實際應用。

混合整數線性規劃允許您克服線性規劃的許多限制。您可以使用分段線性函數近似非線性函數、使用半連續變數、模型邏輯約束等。它是一種計算密集型工具,但計嫌睜算機硬體和軟體的進步使其每天都更加適用。

通常,當人們試圖制定和解決優化問題時,第一個問題是他們是否可以應用線性規劃或混合整數線性規劃。

以下文章說明了線性規劃和混合整數線性規劃的一些用例:

隨著計算機能力的增強、演算法的改進以及更多用戶友好的軟體解決方案的出現,線性規劃,尤其是混合整數線性規劃的重要性隨著時間的推移而增加。

解決線性規劃問題的基本方法稱為,它有多種變體。另一種流行的方法是。

混合整數線性規劃問題可以通過更復雜且計算量更大的方法來解決,例如,它在幕後使用線性規劃。這種方法的一些變體是,它涉及使用 切割平面 ,以及。

有幾種適用於線性規劃和混合整數線性規劃的合適且眾所周知的 Python 工具。其中一些是開源的,而另一些是專有的。您是否需要免費或付費工具取決於問題的規模和復雜性,以及對速度和靈活性的需求。

值得一提的是,幾乎所有廣泛使用的線性規劃和混合整數線性規劃庫都是以 Fortran 或 C 或 C++ 原生和編寫的。這是因為線性規劃需要對(通常很大)矩陣進行計算密集型工作。此類庫稱為求解器。Python 工具只是求解器的包裝器。

Python 適合圍繞本機庫構建包裝器,因為它可以很好地與 C/C++ 配合使用。對於本教賀兆程,您不需要任何 C/C++(或 Fortran),但如果您想了解有關此酷功能的更多信息,請查看以下資源:

基本上,當您定義和求解模型時,您使用 Python 函數或方法調用低級庫,該庫執行實際優化工作並將解決方案返回給您的 Python 對象。

幾個免費的 Python 庫專門用於與線性或混合整數線性規劃求解器交互:

在本教程中,您將使用SciPy和PuLP來定義和解決線性規劃問題。

在本節中,您將看到線性規劃問題的兩個示例:

您將在下一節中使用 Python 來解決這兩個問題。

考慮以下線性規劃問題:

你需要找到X和Ÿ使得紅色,藍色和黃色的不平等,以及不平等X 0和ÿ 0,是滿意的。同時,您的解決方案必須對應於z的最大可能值。

您需要找到的自變數(在本例中為 x y )稱為 決策變數 。要最大化或最小化的決策變數的函數(在本例中為 z) 稱為 目芹拍歲標函數 成本函數 或僅稱為 目標 。您需要滿足的 不等式 稱為 不等式約束 。您還可以在稱為 等式約束 的約束中使用方程。

這是您如何可視化問題的方法:

紅線代表的功能2 X + Ý = 20,和它上面的紅色區域示出了紅色不等式不滿足。同樣,藍線是函數 4 x + 5 y = 10,藍色區域被禁止,因為它違反了藍色不等式。黃線是 x + 2 y = 2,其下方的黃色區域是黃色不等式無效的地方。

如果您忽略紅色、藍色和黃色區域,則僅保留灰色區域。灰色區域的每個點都滿足所有約束,是問題的潛在解決方案。該區域稱為 可行域 ,其點為 可行解 。在這種情況下,有無數可行的解決方案。

您想最大化z。對應於最大z的可行解是 最優解 。如果您嘗試最小化目標函數,那麼最佳解決方案將對應於其可行的最小值。

請注意,z是線性的。你可以把它想像成一個三維空間中的平面。這就是為什麼最優解必須在可行區域的 頂點 或角上的原因。在這種情況下,最佳解決方案是紅線和藍線相交的點,稍後您將看到。

有時,可行區域的整個邊緣,甚至整個區域,都可以對應相同的z值。在這種情況下,您有許多最佳解決方案。

您現在已准備好使用綠色顯示的附加等式約束來擴展問題:

方程式 x + 5 y = 15,以綠色書寫,是新的。這是一個等式約束。您可以通過向上一張圖像添加相應的綠線來將其可視化:

現在的解決方案必須滿足綠色等式,因此可行區域不再是整個灰色區域。它是綠線從與藍線的交點到與紅線的交點穿過灰色區域的部分。後一點是解決方案。

如果插入x的所有值都必須是整數的要求,那麼就會得到一個混合整數線性規劃問題,可行解的集合又會發生變化:

您不再有綠線,只有沿線的x值為整數的點。可行解是灰色背景上的綠點,此時最優解離紅線最近。

這三個例子說明了 可行的線性規劃問題 ,因為它們具有有界可行區域和有限解。

如果沒有解,線性規劃問題是 不可行的 。當沒有解決方案可以同時滿足所有約束時,通常會發生這種情況。

例如,考慮如果添加約束x + y 1會發生什麼。那麼至少有一個決策變數(x或y)必須是負數。這與給定的約束x 0 和y 0相沖突。這樣的系統沒有可行的解決方案,因此稱為不可行的。

另一個示例是添加與綠線平行的第二個等式約束。這兩行沒有共同點,因此不會有滿足這兩個約束的解決方案。

一個線性規劃問題是 無界的 ,如果它的可行區域是無界,將溶液不是有限。這意味著您的變數中至少有一個不受約束,可以達到正無窮大或負無窮大,從而使目標也無限大。

例如,假設您採用上面的初始問題並刪除紅色和黃色約束。從問題中刪除約束稱為 放鬆 問題。在這種情況下,x和y不會在正側有界。您可以將它們增加到正無窮大,從而產生無限大的z值。

在前面的部分中,您研究了一個與任何實際應用程序無關的抽象線性規劃問題。在本小節中,您將找到與製造業資源分配相關的更具體和實用的優化問題。

假設一家工廠生產四種不同的產品,第一種產品的日產量為x ₁,第二種產品的產量為x 2,依此類推。目標是確定每種產品的利潤最大化日產量,同時牢記以下條件:

數學模型可以這樣定義:

目標函數(利潤)在條件 1 中定義。人力約束遵循條件 2。對原材料 A 和 B 的約束可以從條件 3 和條件 4 中通過對每種產品的原材料需求求和得出。

最後,產品數量不能為負,因此所有決策變數必須大於或等於零。

與前面的示例不同,您無法方便地將其可視化,因為它有四個決策變數。但是,無論問題的維度如何,原理都是相同的。

在本教程中,您將使用兩個Python 包來解決上述線性規劃問題:

SciPy 設置起來很簡單。安裝後,您將擁有開始所需的一切。它的子包 scipy.optimize 可用於線性和非線性優化。

PuLP 允許您選擇求解器並以更自然的方式表述問題。PuLP 使用的默認求解器是COIN-OR Branch and Cut Solver (CBC)。它連接到用於線性鬆弛的COIN-OR 線性規劃求解器 (CLP)和用於切割生成的COIN-OR 切割生成器庫 (CGL)。

另一個偉大的開源求解器是GNU 線性規劃工具包 (GLPK)。一些著名且非常強大的商業和專有解決方案是Gurobi、CPLEX和XPRESS。

除了在定義問題時提供靈活性和運行各種求解器的能力外,PuLP 使用起來不如 Pyomo 或 CVXOPT 等替代方案復雜,後者需要更多的時間和精力來掌握。

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

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

您可能需要運行pulptest或sudo pulptest啟用 PuLP 的默認求解器,尤其是在您使用 Linux 或 Mac 時:

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

在 Windows 上,您可以下載檔案並運行安裝文件。

在 MacOS 上,您可以使用 Homebrew:

在 Debian 和 Ubuntu 上,使用apt來安裝glpk和glpk-utils:

在Fedora,使用dnf具有glpk-utils:

您可能還會發現conda對安裝 GLPK 很有用:

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

有關詳細信息,請參閱 GLPK 關於使用Windows 可執行文件和Linux 軟體包進行安裝的教程。

在本節中,您將學習如何使用 SciPy優化和求根庫進行線性規劃。

要使用 SciPy 定義和解決優化問題,您需要導入scipy.optimize.linprog():

現在您已經linprog()導入,您可以開始優化。

讓我們首先解決上面的線性規劃問題:

linprog()僅解決最小化(而非最大化)問題,並且不允許具有大於或等於符號 ( ) 的不等式約束。要解決這些問題,您需要在開始優化之前修改您的問題:

引入這些更改後,您將獲得一個新系統:

該系統與原始系統等效,並且將具有相同的解決方案。應用這些更改的唯一原因是克服 SciPy 與問題表述相關的局限性。

下一步是定義輸入值:

您將上述系統中的值放入適當的列表、元組或NumPy 數組中:

注意:請注意行和列的順序!

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

來自目標函數和約束左側的系數的順序必須匹配。每列對應一個決策變數。

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

此語句是多餘的,因為linprog()默認情況下採用這些邊界(零到正無窮大)。

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

最後,是時候優化和解決您感興趣的問題了。你可以這樣做linprog():

參數c是指來自目標函數的系數。A_ub和b_ub分別與不等式約束左邊和右邊的系數有關。同樣,A_eq並b_eq參考等式約束。您可以使用bounds提供決策變數的下限和上限。

您可以使用該參數method來定義要使用的線性規劃方法。有以下三種選擇:

linprog() 返回具有以下屬性的數據結構:

您可以分別訪問這些值:

這就是您獲得優化結果的方式。您還可以以圖形方式顯示它們:

如前所述,線性規劃問題的最優解位於可行區域的頂點。在這種情況下,可行區域只是藍線和紅線之間的綠線部分。最優解是代表綠線和紅線交點的綠色方塊。

如果要排除相等(綠色)約束,只需刪除參數A_eq並b_eq從linprog()調用中刪除:

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

在這個例子中,最優解是紅色和藍色約束相交的可行(灰色)區域的紫色頂點。其他頂點,如黃色頂點,具有更高的目標函數值。

您可以使用 SciPy 來解決前面部分所述的資源分配問題:

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

結果告訴您最大利潤是1900並且對應於x ₁ = 5 和x ₃ = 45。在給定條件下生產第二和第四個產品是沒有利潤的。您可以在這里得出幾個有趣的結論:

opt.statusis0和opt.successis True,說明優化問題成功求解,最優可行解。

SciPy 的線性規劃功能主要用於較小的問題。對於更大和更復雜的問題,您可能會發現其他庫更適合,原因如下:

幸運的是,Python 生態系統為線性編程提供了幾種替代解決方案,這些解決方案對於更大的問題非常有用。其中之一是 PuLP,您將在下一節中看到它的實際應用。

PuLP 具有比 SciPy 更方便的線性編程 API。您不必在數學上修改您的問題或使用向量和矩陣。一切都更干凈,更不容易出錯。

像往常一樣,您首先導入您需要的內容:

現在您已經導入了 PuLP,您可以解決您的問題。

您現在將使用 PuLP 解決此系統:

第一步是初始化一個實例LpProblem來表示你的模型:

您可以使用該sense參數來選擇是執行最小化(LpMinimize或1,這是默認值)還是最大化(LpMaximize或-1)。這個選擇會影響你的問題的結果。

一旦有了模型,就可以將決策變數定義為LpVariable類的實例:

您需要提供下限,lowBound=0因為默認值為負無窮大。該參數upBound定義了上限,但您可以在此處省略它,因為它默認為正無窮大。

可選參數cat定義決策變數的類別。如果您使用的是連續變數,則可以使用默認值"Continuous"。

您可以使用變數x和y創建表示線性表達式和約束的其他 PuLP 對象:

當您將決策變數與標量相乘或構建多個決策變數的線性組合時,您會得到一個pulp.LpAffineExpression代表線性表達式的實例。

注意:您可以增加或減少變數或表達式,你可以乘他們常數,因為紙漿類實現一些Python的特殊方法,即模擬數字類型一樣__add__(),__sub__()和__mul__()。這些方法用於像定製運營商的行為+,-和*。

類似地,您可以將線性表達式、變數和標量與運算符 ==、=以獲取表示模型線性約束的紙漿.LpConstraint實例。

註:也有可能與豐富的比較方法來構建的約束.__eq__(),.__le__()以及.__ge__()定義了運營商的行為==,=。

考慮到這一點,下一步是創建約束和目標函數並將它們分配給您的模型。您不需要創建列表或矩陣。只需編寫 Python 表達式並使用+=運算符將它們附加到模型中:

在上面的代碼中,您定義了包含約束及其名稱的元組。LpProblem允許您通過將約束指定為元組來向模型添加約束。第一個元素是一個LpConstraint實例。第二個元素是該約束的可讀名稱。

設置目標函數非常相似:

或者,您可以使用更短的符號:

現在您已經添加了目標函數並定義了模型。

注意:您可以使用運算符將 約束或目標附加到模型中,+=因為它的類LpProblem實現了特殊方法.__iadd__(),該方法用於指定 的行為+=。

對於較大的問題,lpSum()與列表或其他序列一起使用通常比重復+運算符更方便。例如,您可以使用以下語句將目標函數添加到模型中:

它產生與前一條語句相同的結果。

您現在可以看到此模型的完整定義:

模型的字元串表示包含所有相關數據:變數、約束、目標及其名稱。

注意:字元串表示是通過定義特殊方法構建的.__repr__()。有關 的更多詳細信息.__repr__(),請查看Pythonic OOP 字元串轉換:__repr__vs__str__ .

最後,您已准備好解決問題。你可以通過調用.solve()你的模型對象來做到這一點。如果要使用默認求解器 (CBC),則不需要傳遞任何參數:

.solve()調用底層求解器,修改model對象,並返回解決方案的整數狀態,1如果找到了最優解。有關其餘狀態代碼,請參閱LpStatus[]。

你可以得到優化結果作為 的屬性model。該函數value()和相應的方法.value()返回屬性的實際值:

model.objective持有目標函數model.constraints的值,包含鬆弛變數的值,以及對象x和y具有決策變數的最優值。model.variables()返回一個包含決策變數的列表:

如您所見,此列表包含使用 的構造函數創建的確切對象LpVariable。

結果與您使用 SciPy 獲得的結果大致相同。

注意:注意這個方法.solve()——它會改變對象的狀態,x並且y!

您可以通過調用查看使用了哪個求解器.solver:

輸出通知您求解器是 CBC。您沒有指定求解器,因此 PuLP 調用了默認求解器。

如果要運行不同的求解器,則可以將其指定為 的參數.solve()。例如,如果您想使用 GLPK 並且已經安裝了它,那麼您可以solver=GLPK(msg=False)在最後一行使用。請記住,您還需要導入它:

現在你已經導入了 GLPK,你可以在裡面使用它.solve():

該msg參數用於顯示來自求解器的信息。msg=False禁用顯示此信息。如果要包含信息,則只需省略msg或設置msg=True。

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

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

一起來看看這次用的是哪個求解器:

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

您還可以使用 PuLP 來解決混合整數線性規劃問題。要定義整數或二進制變數,只需傳遞cat="Integer"或cat="Binary"到LpVariable。其他一切都保持不變:

在本例中,您有一個整數變數並獲得與之前不同的結果:

Nowx是一個整數,如模型中所指定。(從技術上講,它保存一個小數點後為零的浮點值。)這一事實改變了整個解決方案。讓我們在圖表上展示這一點:

如您所見,最佳解決方案是灰色背景上最右邊的綠點。這是兩者的最大價值的可行的解決方案x和y,給它的最大目標函數值。

GLPK 也能夠解決此類問題。

現在你可以使用 PuLP 來解決上面的資源分配問題:

定義和解決問題的方法與前面的示例相同:

在這種情況下,您使用字典 x來存儲所有決策變數。這種方法很方便,因為字典可以將決策變數的名稱或索引存儲為鍵,將相應的LpVariable對象存儲為值。列表或元組的LpVariable實例可以是有用的。

上面的代碼產生以下結果:

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

讓我們把這個問題變得更復雜和有趣。假設由於機器問題,工廠無法同時生產第一種和第三種產品。在這種情況下,最有利可圖的解決方案是什麼?

現在您有另一個邏輯約束:如果x ₁ 為正數,則x ₃ 必須為零,反之亦然。這是二元決策變數非常有用的地方。您將使用兩個二元決策變數y ₁ 和y ₃,它們將表示是否生成了第一個或第三個產品:

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

這是解決方案:

事實證明,最佳方法是排除第一種產品而只生產第三種產品。

就像有許多資源可以幫助您學習線性規劃和混合整數線性規劃一樣,還有許多具有 Python 包裝器的求解器可用。這是部分列表:

其中一些庫,如 Gurobi,包括他們自己的 Python 包裝器。其他人使用外部包裝器。例如,您看到可以使用 PuLP 訪問 CBC 和 GLPK。

您現在知道什麼是線性規劃以及如何使用 Python 解決線性規劃問題。您還了解到 Python 線性編程庫只是本機求解器的包裝器。當求解器完成其工作時,包裝器返回解決方案狀態、決策變數值、鬆弛變數、目標函數等。

⑼ 學習plc編程怎樣入手

學習PLC編程首先需要從理論基礎開始。

1)學習PLC的基本原理。

硬體:搞清楚輸入和輸出端的基本結構,熟悉埠的基本電氣要求。

軟體:對於PLC系統,必須搞清楚什麼是I/O刷新,這是編程的基礎,知道PLC的工作循環。

推薦學習《可編程式控制制器原理及應用》

2)學習基本指令。

可以先從梯形圖語言開始,先練習基本的邏輯指令。

學些各種邏輯指令塊。

推薦學習《PLC自學手冊》

3)實踐。

可以在模擬器上模擬練習:(一般PLC編程器都有模擬的功能)。

編寫PLC程序,編譯運行,手動輸入一些信號,觀看輸出埠的信號變化是否滿足程序的要求。

最後實戰。

plc編程的方法:

1、經驗法

即是運用自己的或別人的經驗進行設計,設計前選擇與設計要求相類似的成功的例子,並進行修改,增刪部分功能或運用其中部分程序,直至適合自己的情況。在工作過程中,可收集與積累這樣成功的例子,從而可不斷豐富自己的經驗。

2、解析法

可利用組合邏輯或時序邏輯的理論,並運用相應的解析方法,對其進行邏輯關系的求解,然後再根據求解的結果,畫成梯形圖或直接寫出程序。解析法比較嚴密,可以運用一定的標准,使程序優化,可避免編程的盲目性,是較有效的方法。

閱讀全文

與線性編程哪個好相關的資料

熱點內容
猥瑣貓表情教程 瀏覽:599
android音頻文件格式 瀏覽:458
漫畫臉app哪裡可以下載 瀏覽:959
購買歡樂升級歡樂豆 瀏覽:282
學習智能機器人用什麼編程最好 瀏覽:655
蘋果手機如何管控app 瀏覽:633
mn文件夾 瀏覽:590
安卓平板通用刷機包下載 瀏覽:751
安卓獲取內部存儲路徑 瀏覽:880
寫代碼兩台顯示器 瀏覽:327
unitypackage壓縮文件 瀏覽:493
奕心安卓 瀏覽:563
使用土地的有關證明文件包含哪些 瀏覽:493
數據標注哪裡可以接 瀏覽:482
在家自學編程下什麼學 瀏覽:705
最近很火的app軟體是什麼軟體 瀏覽:862
ai文字工具 瀏覽:157
蘭博玩游戲路徑怎麼選擇正確文件 瀏覽:972
淘寶直通車恢復老版本 瀏覽:510
播放草莓的圖片我都文件 瀏覽:55

友情鏈接