s = s.slice()
时间: 2024-05-17 14:19:15 浏览: 15
这是一个 JavaScript 代码片段,其中 `s` 是一个数组或字符串。这行代码会创建 `s` 的一个浅拷贝,并将其赋值给 `s`。浅拷贝意味着,新数组或字符串中的元素或字符仍然是原始对象的引用,而不是它们的副本。这可以用来复制数组或字符串,以便在不改变原始对象的情况下进行操作,或者防止在对原始对象进行操作时对其它代码造成影响。需要注意的是,如果 `s` 是一个对象而不是数组或字符串,那么将会抛出一个错误,因为对象没有 `slice` 方法。
相关问题
def connect(self): s = self.get_slice() if self.connected: return # increment connect attempt self.stat_collector.incr_connect_attempt(self) if s.is_avaliable(): s.connected_users += 1 self.connected = True print(f'[{int(self.env.now)}] Client_{self.pk} [{self.x}, {self.y}] connected to slice={self.get_slice()} @ {self.base_station}') return True else: self.assign_closest_base_station(exclude=[self.base_station.pk]) if self.base_station is not None and self.get_slice().is_avaliable(): # handover self.stat_collector.incr_handover_count(self) elif self.base_station is not None: # block self.stat_collector.incr_block_count(self) else: pass # uncovered print(f'[{int(self.env.now)}] Client_{self.pk} [{self.x}, {self.y}] connection refused to slice={self.get_slice()} @ {self.base_station}') return False def disconnect(self): if self.connected == False: print(f'[{int(self.env.now)}] Client_{self.pk} [{self.x}, {self.y}] is already disconnected from slice={self.get_slice()} @ {self.base_station}') else: slice = self.get_slice() slice.connected_users -= 1 self.connected = False print(f'[{int(self.env.now)}] Client_{self.pk} [{self.x}, {self.y}] disconnected from slice={self.get_slice()} @ {self.base_station}') return not self.connected def start_consume(self): s = self.get_slice() amount = min(s.get_consumable_share(), self.usage_remaining) # Allocate resource and consume ongoing usage with given bandwidth s.capacity.get(amount) print(f'[{int(self.env.now)}] Client_{self.pk} [{self.x}, {self.y}] gets {amount} usage.') self.last_usage = amount def release_consume(self): s = self.get_slice() # Put the resource back if self.last_usage > 0: # note: s.capacity.put cannot take 0 s.capacity.put(self.last_usage) print(f'[{int(self.env.now)}] Client_{self.pk} [{self.x}, {self.y}] puts back {self.last_usage} usage.') self.total_consume_time += 1 self.total_usage += self.last_usage self.usage_remaining -= self.last_usage self.last_usage = 0中的资源分配
要将这些函数修改为最小容量的资源分配,需要进行以下更改:
1. 在 `is_avaliable` 函数中,将 `bandwidth_next` 的计算方式修改为 `real_cap / (self.connected_users + 1) >= self.bandwidth_min`,即下一个用户的带宽大于等于最小容量。
2. 在 `start_consume` 函数中,将 `amount` 的计算方式修改为 `min(s.get_consumable_share(), self.usage_remaining, self.bandwidth_min)`,即需要分配的资源量为可用资源、剩余需求和最小容量的最小值。
修改后的代码如下:
```
def connect(self):
s = self.get_slice()
if self.connected:
return
# increment connect attempt
self.stat_collector.incr_connect_attempt(self)
if s.is_avaliable():
s.connected_users += 1
self.connected = True
print(f"[{int(self.env.now)}] Client_{self.pk} [{self.x}, {self.y}] connected to slice={self.get_slice()} @ {self.base_station}")
return True
else:
self.assign_closest_base_station(exclude=[self.base_station.pk])
if self.base_station is not None and self.get_slice().is_avaliable():
# handover
self.stat_collector.incr_handover_count(self)
elif self.base_station is not None:
# block
self.stat_collector.incr_block_count(self)
else:
pass # uncovered
print(f"[{int(self.env.now)}] Client_{self.pk} [{self.x}, {self.y}] connection refused to slice={self.get_slice()} @ {self.base_station}")
return False
def disconnect(self):
if not self.connected:
print(f"[{int(self.env.now)}] Client_{self.pk} [{self.x}, {self.y}] is already disconnected from slice={self.get_slice()} @ {self.base_station}")
else:
slice = self.get_slice()
slice.connected_users -= 1
self.connected = False
print(f"[{int(self.env.now)}] Client_{self.pk} [{self.x}, {self.y}] disconnected from slice={self.get_slice()} @ {self.base_station}")
return not self.connected
def start_consume(self):
s = self.get_slice()
amount = min(s.get_consumable_share(), self.usage_remaining, self.bandwidth_min)
s.capacity.get(amount)
print(f"[{int(self.env.now)}] Client_{self.pk} [{self.x}, {self.y}] gets {amount} usage.")
self.last_usage = amount
def release_consume(self):
s = self.get_slice()
if self.last_usage > 0:
s.capacity.put(self.last_usage)
print(f"[{int(self.env.now)}] Client_{self.pk} [{self.x}, {self.y}] puts back {self.last_usage} usage.")
self.total_consume_time += 1
self.total_usage += self.last_usage
self.usage_remaining -= self.last_usage
self.last_usage = 0
def is_avaliable(self):
real_cap = min(self.init_capacity, self.bandwidth_max)
return real_cap / (self.connected_users + 1) >= self.bandwidth_min
```
请修改输出,一个是LABEL输出,一个是特征输出 : def _slice_multi(self): # self.n 是数据集总行数 # self.m 是列 s = self.ps*self.skip + self.Ck-1 + self.h-1 X1 = np.zeros((self.n-s, self.w, self.m)) # short term dataset X2 = np.zeros((self.n-s, self.ps*self.Ck, self.m)) # long term dataset Y = np.zeros((self.n-s, self.m)) # output dataset for i in range(s, self.n): t = i-self.h+1 X1[i-s] = self.raw[t-self.w:t].copy() idx = [] for k in range(self.ps): # 执行4次,每次间隔skip长,取Ck=6, total = 4 * 6 = 24 idx = list(range(t-self.Ck-k*self.skip, t-k*self.skip)) + idx idx = np.array(idx, dtype=int) X2[i-s] = self.raw[idx].copy() Y[i-s] = self.raw[i].copy() return X1, X2, Y
修改后的函数输出为:
```python
def _slice_multi(self):
# self.n 是数据集总行数
# self.m 是列
s = self.ps * self.skip + self.Ck - 1 + self.h - 1
X1 = np.zeros((self.n - s, self.w, self.m)) # 短期数据集
X2 = np.zeros((self.n - s, self.ps * self.Ck, self.m)) # 长期数据集
Y = np.zeros((self.n - s, self.m)) # 输出数据集
for i in range(s, self.n):
t = i - self.h + 1
X1[i - s] = self.raw[t - self.w:t].copy()
idx = []
for k in range(self.ps):
# 执行self.ps次,每次间隔self.skip长,取self.Ck=6, total = self.ps * self.Ck
idx = list(range(t - self.Ck - k * self.skip, t - k * self.skip)) + idx
idx = np.array(idx, dtype=int)
X2[i - s] = self.raw[idx].copy()
Y[i - s] = self.raw[i].copy()
# 返回特征和标签
return {'X1': X1, 'X2': X2}, Y
```
修改后的函数输出了两个变量,一个是包含特征 X1 和 X2 的字典,另一个是标签 Y。这样的修改使得函数输出更加清晰,方便后续的使用。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)