moea项目的问题解决方案

2023-09-19 00:23:40

报错1:run_GAN-adjlvxm.py’: [Errno 2] No such file or directory

(moea) aaa@ASUS:~/ML/paper/APG-SMOEA/code$ sh test.sh
python: can't open file '/home/aaa/ML/paper/APG-SMOEA/code/run_GAN-adjlvxm.py': [Errno 2] No such file or directory
Finish GAN-adjlvxm on 1

修改了run_benchmark.sh的line22->line23

报错2:mkdir: cannot create directory ‘./result’: File exists

(moea) aaa@ASUS:~/ML/paper/APG-SMOEA/code$ sh test.sh
mkdir: cannot create directory ‘./result’: File exists
mkdir: cannot create directory ‘./pop’: File exists

这个错误信息表示 test.sh 脚本试图创建两个目录(./result 和 ./pop),但这些目录已经存在。mkdir 命令默认情况下不会覆盖已经存在的目录,因此会显示这样的错误。

根据你的需求,这里有几个可能的解决方案:

  1. 忽略目录已存在的错误: 如果目录已存在并且这不是问题,你可以在 mkdir 命令后面添加 -p 选项来忽略这个错误。
mkdir -p ./result
mkdir -p ./pop

使用 -p 参数后,如果目录已经存在,mkdir 命令不会显示错误。

  1. 使用 -p 参数后,如果目录已经存在,mkdir 命令不会显示错误。
[ -d "./result" ] || mkdir ./result
[ -d "./pop" ] || mkdir ./pop

  1. 删除旧目录然后重新创建: 如果你想确保目录是空的,你也可以先删除它,然后重新创建。
rm -rf ./result
rm -rf ./pop
mkdir ./result
mkdir ./pop

警告: rm -rf 命令会删除目录和其下所有文件,使用时请小心。

根据你的实际需求选择合适的方法。

报错3:from function.APG-SMOEA_framework import optimize

File "/home/aaa/ML/paper/APG-SMOEA/code/run_APG-SMOEA.py", line 7
    from function.APG-SMOEA_framework import optimize

Python 的模块名(也就是 .py 文件名)不应该包含短横线(-)。根据 Python 的命名规约,模块名应该是小写字母,并且可以包含下划线。

如果你有一个名为 APG-SMOEA_framework.py 的文件,并且你试图用 import 语句导入它,Python 会因为短横线而报错,因为它不是一个合法的 Python 标识符。

解决方案是将文件名和对应的 import 语句中的短横线(-)改为下划线(_)或其他合法的 Python 标识符字符。

例如,你可以将文件名改为 APG_SMOEA_framework.py,然后更新 import 语句为:

from function.APG_SMOEA_framework import optimize

对sh test.sh进行计时

test.sh 的脚本内容如下:

#!/usr/bin/env bash

# 入口脚本!
# result生成原始结果 paper_process使用
mkdir -p ./result
# 在nikkei上的两个实验生成讨论的结果 discussion_process使用
mkdir -p ./pop
mkdir -p ./trial_len

# 数字控制跑哪些测试集bash run_all.sh
# instance序号:1-hangseng 2-dax 3-ftse 4-sp 5-nikkei
bash ./run_benchmark.sh 1

在命令行运行test.sh,它需要运行很久,我想记录一下,它到底是运行了多久,要如何处理?

要测量test.sh运行所需的时间,你可以在运行脚本之前使用time命令,像这样:

time sh test.sh

这将在脚本执行完成后显示实际时间、用户时间和系统时间。

time sh test.sh 命令通常会显示三种时间:
real: 实际经过的墙钟时间。
user: 用户态代码执行时间。
sys: 内核态代码执行时间。
这些时间通常以分钟和秒的形式显示,例如 1m30.002s 表示1分钟30.002秒。如果执行时间很短,它可能只会以秒或者毫秒来显示。所以,是的,显示的时间通常包括秒作为单位,但也可能包括分钟。
那上面的三个时间,到底哪个是真实的程序运行的时间呢?
在这里插入图片描述

在这里插入图片描述
对上图的解读:
在这里插入图片描述

或者,你也可以修改你的test.sh脚本,在脚本内部记录开始和结束时间:

#!/usr/bin/env bash

start_time=$(date +%s)  # 记录开始时间

# 你的原始代码
mkdir -p ./result
mkdir -p ./pop
mkdir -p ./trial_len

bash ./run_benchmark.sh 1

end_time=$(date +%s)  # 记录结束时间
elapsed_time=$(expr $end_time - $start_time)

echo "耗时: $elapsed_time 秒"

这两种方法都可以让你了解脚本需要多长时间来运行。

脚本解读

解读1

benchmarks=("hangseng" "dax" "ftse" "sp" "nikkei")
# 分别做五个测试集上的两个实验对比测试
mkdir -p ./result/${benchmarks[$1-1]}
mkdir -p ./result/${benchmarks[$1-1]}/GAN-adjlvxm

这段 Bash 脚本的代码主要执行了以下操作:

  1. 定义了一个名为 benchmarks 的数组,包含五个字符串元素:hangseng、dax、ftse、sp、nikkei。
  2. 使用 mkdir -p 命令创建两个目录。
    在这里,${benchmarks[$1-1]} 是一个 Bash 数组的索引方式。$1 是脚本的第一个参数,$1-1 是将这个参数减去 1(因为 Bash 数组是从 0 开始计数的)。所以 ${benchmarks[$1-1]} 将从 benchmarks 数组中选择一个元素。

举例来说:

  • 如果你运行脚本并传入参数 1,那么 ${benchmarks[$1-1]} 将返回 hangseng。
  • 如果传入参数 2,则返回 dax。
  • 以此类推。

然后,mkdir -p ./result/${benchmarks[$1-1]}mkdir -p ./result/${benchmarks[$1-1]}/GAN-adjlvxm 这两行代码将基于选定的数组元素创建两个目录。

例如,如果传入参数 1,脚本将创建以下目录:

  • ./result/hangseng
  • ./result/hangseng/GAN-adjlvxm
    mkdir -p 选项确保如果目录已存在,命令不会报错,并且会创建任何缺少的父目录。

解读2

python run_APG-SMOEA.py $1 >> ./result/${benchmarks[$1-1]}/GAN-adjlvxm/igd.txt

在这里插入图片描述
>>符号是将什么的输出给重定向到igd.txt中
在 Bash 和其他 Unix-like 的 shell 中,>> 符号用于重定向命令的标准输出(stdout)到一个文件,并追加到该文件的末尾。如果文件不存在,将创建该文件。

在你给出的这个例子中:

python run_APG-SMOEA.py $1 >> ./result/${benchmarks[$1-1]}/GAN-adjlvxm/igd.txt

python run_APG-SMOEA.py 1 命令会运行一个 P y t h o n 脚本,并将脚本的标准输出追加到 . / r e s u l t / 1 命令会运行一个 Python 脚本,并将脚本的标准输出追加到 ./result/ 1命令会运行一个Python脚本,并将脚本的标准输出追加到./result/{benchmarks[$1-1]}/GAN-adjlvxm/igd.txt 文件中。

简单来说,任何 run_APG-SMOEA.py 脚本打印(输出)到控制台(终端)的信息将被追加到 igd.txt 文件中,而不是显示在终端上。

例如,假设 run_APG-SMOEA.py 脚本包含如下代码:

print("Hello, World!")

运行上述 Bash 命令后,Hello, World! 将不会在终端显示,而是会被追加到 ./result/${benchmarks[$1-1]}/GAN-adjlvxm/igd.txt 文件的末尾。

准确地说,run_APG-SMOEA.py 脚本中的 print() 函数产生的输出(也就是标准输出,或 stdout)将被重定向并追加到 igd.txt 文件中,而不会出现在终端窗口。这是 >> 符号在 Bash 脚本中的作用。

py文件的命名带有-

上面的python run_APG-SMOEA.py 这里面也有-符号啊,也可以正常运行啊?为什么之前说python的文件名只能是字母和下划线的组合呢?

Python 脚本文件名(比如 .py 文件)确实可以包含短横线(-),并且你可以正常地运行这样命名的文件。比如,通过命令行 python run_APG-SMOEA.py 这样是完全可以的。

然而,问题出现在当你尝试导入这样一个带有短横线命名的 Python 文件作为模块时。Python 的模块名必须是有效的 Python 标识符,而有效的 Python 标识符不能包含短横线。这就是为什么在 import 语句中你不能直接导入带有短横线的 Python 文件。

总结一下:

可以使用 python run_APG-SMOEA.py 来运行这样命名的脚本。
不能使用 import run_APG-SMOEA 来导入这样命名的文件作为一个模块。

.format

benchmarks = ["hangseng", "dax", "ftse", "sp", "nikkei"]
size = [31, 85, 89, 98, 225]
savedir = "result/{}/GAN-adjlvxm/".format(benchmarks[instance-1])  # instance=1

在Python中,字符串的.format()方法用于格式化字符串。它会替换字符串中的大括号({})为提供的变量或值。

在这个例子中:

savedir = "result/{}/GAN-adjlvxm/".format(benchmarks[instance-1])
  • result/{}/GAN-adjlvxm/ 是一个字符串,其中的 {} 是一个占位符。
  • .format(benchmarks[instance-1]) 会将 {} 替换为 benchmarks[instance-1] 的值。
    benchmarks 是一个包含多个股市名称(如 “hangseng”, “dax”, “ftse”, “sp”, “nikkei”)的列表。
  • instance 是一个变量(假设它是整数),instance-1 是为了将其转换为0-based索引(Python列表的索引从0开始)。

举个例子,如果 instance = 1,那么 benchmarks[instance-1] 就会是 “hangseng”。所以,savedir 就会被设置为 “result/hangseng/GAN-adjlvxm/”。

这样,savedir 就可以作为保存结果的目录路径,并且这个路径会根据不同的 instance 值而改变,从而适应不同的股市名称。

更多推荐

esbuild中文文档-路径解析配置项(Path resolution - External、Main fields)

文章目录路径解析配置项Pathresolution外部模块External主字段Mainfields对于包的开发者结语哈喽,大家好!我是「励志前端小黑哥」,我带着最新发布的文章又来了!老规矩,小手动起来~点赞关注不迷路!esbuild简单介绍esbuild为了突破了JavaScript语言的瓶颈,采用了Go语言编写,构

Vue 如何监听 localstorage的变化

一.说明在日常开发中,我们经常使用localStorage来存储一些变量。这些变量会存储在浏览中。对于localStorage来说,即使关闭浏览器,这些变量依然存储着,方便我们开发的时候在别的地方使用。二.localStorage的使用存储值:window.localStorage.setItem(‘键名’,值)读取值

紫禁之巅-Unity游戏开发教程:勇者斗恶龙之魔法石

说明开设了一个unity游戏开发课程,可以帮助对游戏开发有兴趣的小伙伴学习Unity游戏开发的知识和技术,课程地址第一节课的课件是游戏工程,第二节的课件是大纲,和文章内相同,其它章节的课件和第一节课的相同,不需要重复下载课程大纲课程简介开设课程是为了帮助对游戏开发感兴趣的小伙伴掌握游戏开发的思路、方法、技术。为了帮助学

ps打开找不到MSVCP140.dll重新安装方法,安装ps出现msvcp140.dll缺失解决方法

在计算机中,我们可能会遇到许多问题,其中之一就是找不到msvcp140.dll文件。msvcp140.dll是一个动态链接库文件,它是MicrosoftVisualC++2015Redistributable的一部分。当计算机找不到这个文件时,可能会导致程序无法正常运行。本文将为您提供多个解决方法,以及msvcp140

每日一练 | 华为认证真题练习Day114

1、如图所示,交换机GE0/0/1和GE0/0/2两个端口都进行不同的此Hybrid配置,下面说法正确是()。(多选)A.财务部门发出的数据帧在交换机中携带的Tag为VLAN20B.行政部门和财务部门不能互访,因为两部门所属的VLAN不相同C.如果交换机的GE0/0/1和GE0/0/2两个端口都修改为Trunk端口,则

头歌平台 | 逻辑函数及其描述工具logisim使用

文章目录1、根据布尔表达式绘制电路2、根据真值表绘制电路3、根据简化真值表绘制电路4、根据波形图绘制电路5、根据卡诺图绘制电路1、根据布尔表达式绘制电路任务描述本关任务:在Logisim中根据给定的布尔代数表达式(F=AB+BC+CA)绘制逻辑电路。案例场景举例举重比赛裁判电路。在举重比赛中,通常有三位裁判(A、B、C

【SQL数据分析 | 手把手教你做淘宝用户分析!】

SQL也能做分析?当然!常见的数据清洗,预处理,数据分类,数据筛选,分类汇总,以及数据透视等操作,用SQL一样可以实现(除了可视化,需要放到Excel里呈现)。SQL不仅可以从数据库中读取数据,还能通过不同的SQL函数语句直接返回所需要的结果,从而大大提高了自己在客户端应用程序中计算的效率。但是,这个过程需要很熟练掌握

TypeScript入门

目录一:语言特性二:TypeScript安装NPM安装TypeScript三:TypeScript基础语法第一个TypeScript程序四:TypeScript保留关键字空白和换行TypeScript区分大小写TypeScript注释TypeScript支持两种类型的注释五:TypeScript与面向对象六:TypeS

如何使用ChatGPT,而不是生成默认风格的八股文

现在我每天都使用ChatGPT来执行多项任务,包括但不限于内容创建。无论是编写文本还是与我讨论我的业务目标,ChatGPT总是会时不时的用到。但与所有强大的工具一样,ChatGPT和类似的大型语言模型(LLM)也有其局限性。在我从事人工智能工作的过程中,我多次偶然发现它们。如果您在业务中依赖ChatGPT而不了解其局限

正则表达式 - 语法

目录正则表达式-语法普通字符测试工具非打印字符特殊字符限定符定位符选择以下列出?=、?<=、?!、?反向引用实例实例正则表达式-语法正则表达式是一种用于匹配和操作文本的强大工具,它是由一系列字符和特殊字符组成的模式,用于描述要匹配的文本模式。正则表达式可以在文本中查找、替换、提取和验证特定的模式。例如:runoo+b,

125. 验证回文串 【简单题】

题目如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个回文串。字母和数字都属于字母数字字符。给你一个字符串s,如果它是回文串,返回true;否则,返回false。示例1:输入:s="Aman,aplan,acanal:Panama"输出:true解释:"a

热文推荐