(2)Mean,X这里的“,”号
(3)STST/Stocks,Stocks/: COV这里的“,”号,另外这里二维集合的定义要改成:STST(Stocks,Stocks): COV
(4)Mean=0.003581 0.002352 0.00102 -0.00019;这里的“;”号
这样修改后运行的结果:
No feasible solution found.
Extended solver steps: 5
Total solver iterations:32
Model Title: 投资组合模型
Variable ValueReduced Cost
TARGET1.0500000.000000
MEAN( 1) 0.3581000E-020.000000
MEAN( 2) 0.2352000E-020.000000
MEAN( 3) 0.1020000E-020.000000
MEAN( 4) -0.1900000E-030.000000
X( 1) 0.73119432295194.
X( 2)1.1064542306261.
X( 3)2.4484072318256.
X( 4)13.412422329153.
COV( 1, 1) 0.1661327E-020.000000
COV( 1, 2) 0.9088240E-030.000000
COV( 1, 3) 0.6733000E-030.000000
COV( 1, 4) 0.6325350E-030.000000
COV( 2, 1) 0.9088240E-030.000000
COV( 2, 2) 0.1216098E-020.000000
COV( 2, 3) 0.7701690E-030.000000
COV( 2, 4) 0.6216930E-030.000000
COV( 3, 1) 0.6733000E-030.000000
COV( 3, 2) 0.7701690E-030.000000
COV( 3, 3) 0.9575310E-030.000000
COV( 3, 4) 0.5902240E-030.000000
COV( 4, 1) 0.6325350E-030.000000
COV( 4, 2) 0.6216930E-030.000000
COV( 4, 3) 0.5902240E-030.000000
COV( 4, 4) 0.9580890E-030.000000
RowSlack or Surplus Dual Price
OBJ 0.1152338E+09 -1.000000
ONE -16.698482327442.
TWO -1.044830 -9005313.
显示为无可行解,可能约束条件里存在问题。
例如:放宽对x取正的约束,使允许为负,修改的代码:
MODEL:
Title 投资组合模型
SETS:
STOCKS/ 1..4/:Mean,X
STST(Stocks,Stocks): COV
ENDSETS
DATA:
TARGET=1.05
Mean=0.003581 0.002352 0.00102 -0.00019
COV=0.001661327 0.000908824 0.000673300 0.000632535
0.000908824 0.001216098 0.000770169 0.000621693
0.000673300 0.000770169 0.000957531 0.000590224
0.000632535 0.000621693 0.000590224 0.000958089
ENDDATA
[OBJ]min=@sum(STST(i,j):COV(i,j)*x(i)*x(j))
[ONE]@sum(STOCKS:X)=1
[TWO]@sum(stocks:Mean*X)>=TARGET
@FOR(STOCKS:@FREE(X))
END
运行结果为:
Local optimal solution found.
Objective value: 92.90818
Extended solver steps: 5
Total solver iterations: 4
Model Title: 投资组合模型
Variable ValueReduced Cost
TARGET1.0500000.000000
MEAN( 1) 0.3581000E-020.000000
MEAN( 2) 0.2352000E-020.000000
MEAN( 3) 0.1020000E-020.000000
MEAN( 4) -0.1900000E-030.000000
X( 1)200.47850.000000
X( 2)148.95670.000000
X( 3) -69.803570.000000
X( 4) -278.63160.000000
COV( 1, 1) 0.1661327E-020.000000
COV( 1, 2) 0.9088240E-030.000000
COV( 1, 3) 0.6733000E-030.000000
COV( 1, 4) 0.6325350E-030.000000
COV( 2, 1) 0.9088240E-030.000000
COV( 2, 2) 0.1216098E-020.000000
COV( 2, 3) 0.7701690E-030.000000
COV( 2, 4) 0.6216930E-030.000000
COV( 3, 1) 0.6733000E-030.000000
COV( 3, 2) 0.7701690E-030.000000
COV( 3, 3) 0.9575310E-030.000000
COV( 3, 4) 0.5902240E-030.000000
COV( 4, 1) 0.6325350E-030.000000
COV( 4, 2) 0.6216930E-030.000000
COV( 4, 3) 0.5902240E-030.000000
COV( 4, 4) 0.9580890E-030.000000
RowSlack or Surplus Dual Price
OBJ92.90818 -1.000000
ONE0.000000 0.1438273
TWO0.000000 -177.1049
matlab控制运算精度用的是digits和vpa这两个函数。digits用于规定运算精度,比如:digits(20)这个语句就规定了运算精度是20位有效数字。但并不是规定了就可以使用,因为实际编程中,我们可能有些运算需要控制精度,而有些不需要控制。vpa就用于解决这个问题,凡是用需要控制精度的,我们都对运算表达式使用vpa函数。例如:digits(5)a=vpa(sqrt(2))这样a的值就是1.4142,而不是准确的1.4142135623730950488016887242097。1、首先在电脑中打开Lingo软件,进入下面编程状态。
2、然后输入目标函数:min z = 2*x1 + 3*x2 + x3 如下图所示。
3、然后进行运行一下,看看自己是否输入正确,如果没有出现“error”,那么继续输入下面的约数条件。
4、最后输入约数方程之后,再次运行一下,若发现和下图一样则表示输入正确,若显示的不一样则表示输入的有误,在这里可以看出objective value给出的后面的数字是7,那么最优解就是7,就完成了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)