使用优化工具箱时如何解决“数组索引必须为正整数或逻辑值”?

时间:2019-05-30 11:31:56

标签: matlab

我正在尝试通过优化工具箱实现此优化问题:

  

enter image description here

其中N = 60个文件和K = 130个用户,1/K ≤ M ≤ t∗N/K个文件。 所以我写了这段代码:

t∗ =3

但是输出应该如图所示,是切割定界之一

  

enter image description here

错误如下:

  

数组索引必须为正整数或逻辑值。

     

尝试错误(第17行)        clear all; close all; clc; N=60; t=3; K=130; for M=0:0.1:1.4 r=zeros(size(1:M)); f=le(1/K,M); c=le(M,3*N/K); if f || c R2 = @(s) -(s-(s./ floor(N./s)).*M); LB = 1; UB = min(N, K); options = optimoptions('fmincon','Algorithm','interior-point'); % run interior-point algorithm [sopt, ropt] = fmincon(R2,1,[],[],[],[],LB,UB,[],options); r(M) = -ropt; end end plot(0:1.4,r(M),'r-','LineWidth',2); xlabel('Cache Capacity (M)'); ylabel('Delivery Rate (R)'); ;

1 个答案:

答案 0 :(得分:0)

  • 首先在for循环外定义 @NgModule({ imports: [SomeModule]}) export class VendasModule
r
  • 要在for循环内索引r,您需要整数,M是一个浮点数。

    您可以只定义其他索引 r =zeros(size(0:0.1:1.4));

  • 如果需要,在绘图时也不需要指定i索引 绘制整个数组,并记住将横坐标保持为 r

代码如下

0:0.1:1.4

或者,您可以将所有N=60; t=3; K=130; i = 0; r = zeros(size(0:0.1:1.4)); for M=0:0.1:1.4 i = i+1; f=le(1/K,M); c=le(M,3*N/K); if f || c R2 = @(s) -(s-(s./ floor(N./s)).*M); LB = 1; UB = min(N, K); options = optimoptions('fmincon','Algorithm','interior-point'); % run interior-point algorithm [sopt, ropt] = fmincon(R2,1,[],[],[],[],LB,UB,[],options); r(i) = -ropt; end end plot(0:0.1:1.4,r,'r-','LineWidth',2); xlabel('Cache Capacity (M)'); ylabel('Delivery Rate (R)'); 元素预定义为M,然后循环使用整数索引,该索引也可以用于索引M = 0:0.1:1.4

对应代码如下

r
  

图表enter image description here