ILOG CPLEX 部分語法彙總

從兩天前開始接觸CPLEX的OPL語言,各種錯誤不斷,但網上參考資料又很少。本博文基於自己的摸索,彙總部分基礎語法,以備不時之需。以TSP爲例。

關鍵詞 range 表示一個範圍,使用範例:range city=0..CityNum-1; 表示定義了一個city的變量,取值是0到CityNum-1,其中CityNum是我在此之前定義的int型變量,表示城市數量。

關鍵詞 dvar 表示變量。其中常見的是 dvar boolean flag[city],其中boolean表示該變量是一個0-1變量,需要注意的是,在定義數組時,其中的索引需要用range類型的變量。一開始我定義成 dvar boolean flag[CityNum],系統報錯。

關鍵詞 forall表示循環,與R語言中for循環用法類似,使用範例:forall(c1 in city) x[c1]=x[c1]+1; 其中c1不需要定義類型,city是range型。也可以在forall中表示多維for循環,例如:forall(c1,c2 in city) x[c1][c2]=x[c1][c2]+1;等價於forall(c1 in city) forall(c2 in city) x[c1][c2]=x[c1][c2]+1; 這一條不過多解釋。

關鍵詞 execute,表示嵌入的代碼塊,其後可以緊跟一串字符表示該代碼塊的名稱,也可以直接用花括號表示代碼段,常用於數據預處理和數據輸出等。在execute代碼塊中,用for表示for循環,例如:for(var c1 in city)x[c1]=x[c1]+1;需要定義變量c1爲 var c1。與execute功能相似的是main表示的代碼塊,但main代碼塊還能控制程序流程,功能更加複雜,目前我暫未涉及。

整體而言,如果有其他編程語言的基礎,學習OPL語言並不是非常困難的事情,只是有些細節需要注意。順便一提,還不會在cplex中用OPL讀取文檔,只會整句讀入,但不會對數據進行諸如字符串分割,字符串提取等數據預處理操作。因此,今天還嘗試了一下在eclipse中用JAVA調用cplex。但感覺寫得有點煩,最後還失敗了。導致這一痛苦的經歷的原因主要是對cplex不熟悉,很多類不能靈活運用,因此總是報各種錯誤。下一階段作爲過渡,可以先用JAVA對數據進行預處理,再用cplex 的OPL運算具體的線性規劃模型。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章