Skip to content

Commit 8a9de01

Browse files
Change placement elements management (close,save,delete button)
Add available change graphic's zorder (Now point better view) Change color point => Black Change size textReach for better view
1 parent 22c9fe5 commit 8a9de01

File tree

11 files changed

+46
-48
lines changed

11 files changed

+46
-48
lines changed

Lab2/frontshow/animation.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import random
22
import outer_imports.matplotlib as omatpl
33
import global_variable as gv
4-
import frontshow.Color as colors
4+
import Lab2.frontshow.Color as colors
55

66
def animate(frame, arr,best_result=None, textReach=None, marker=None):
77
if len(arr) > frame:
88
size_point = gv.SIZE_POINT
9-
color = colors.Color.GREEN.value
9+
color = colors.Color.BLACK.value
1010
if (len(arr) - 1 == frame):
1111
color = colors.Color.RED.value
1212
size_point = 50
@@ -22,9 +22,9 @@ def animate(frame, arr,best_result=None, textReach=None, marker=None):
2222
str_temp = "# " + str(frame) + " X=" + str(round(arr[frame][0], 4)) + " Y=" + str(round(arr[frame][1],4 )) + " Z=" + str(round(point_z, 4)) + "\n"
2323
textReach.insert(1.0, str_temp)
2424
if(len(arr) - 1 == frame):
25-
gv.extraScatter.append(omatpl.ax_3d.scatter(arr[frame][0], arr[frame][1], point_z, c=color, marker=marker, s=size_point, zorder=4))
25+
gv.extraScatter.append(omatpl.ax_3d.scatter(arr[frame][0], arr[frame][1], point_z, c=color, marker=marker, s=size_point, zorder=1))
2626
else:
27-
gv.scatter_points.append(omatpl.ax_3d.scatter(arr[frame][0], arr[frame][1], point_z, c=color, marker=marker, s=size_point,zorder=2))
27+
gv.scatter_points.append(omatpl.ax_3d.scatter(arr[frame][0], arr[frame][1], point_z, c=color, marker=marker, s=size_point,zorder=1))
2828

2929
if(len(gv.scatter_points)>15 and len(arr)-2 > frame):
3030
random_countForDel = random.randint(2, 5)

Lab2/frontshow/calc_algorithm/aritificialImmuneSystemShow.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ def call_AIimmuneSystem(arr_textField) -> None:
2626
sizePopulize = int(arr_textField[4].get())
2727
countGenerations = int(arr_textField[5].get())
2828
best_point, points = algorithm_artificial_immune_system(min_x, max_x, min_y, max_y, sizePopulize, gv.current_function, countGenerations)
29-
bestResult = [best_point[0], best_point[1], best_point[2], colors.Color.CYAN.value, "o", 70]
29+
bestResult = [best_point[0], best_point[1], best_point[2], colors.Color.CYAN.value, "o", 50]
3030
points = getMatrixFromList(points)
3131
_ = omatpl.FuncAnimation(omatpl.fig_3d, anim.animate, frames=len(points), fargs=(points, bestResult, gv.textReachImmuneSystem, 'o',),interval=gv.SPEED, repeat=False)
3232

Lab2/frontshow/calc_algorithm/bacterialShow.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ def call_Bacterial(arr_textField) -> None:
2424
count_bacterials = int(arr_textField[4].get())
2525
time = int(arr_textField[5].get())
2626
points,bestPoint = algorithm_is_bacterial(min_x, max_x, min_y, max_y, count_bacterials, gv.current_function, time,gv.STEP)
27-
bestResult = [bestPoint[0], bestPoint[1], bestPoint[2], colors.Color.CYAN.value, "o", 70]
27+
bestResult = [bestPoint[0], bestPoint[1], bestPoint[2], colors.Color.CYAN.value, "o", gv.SIZE_POINT]
2828
points = getMatrixFromMatrixList(points)
2929

3030
_ = omatpl.FuncAnimation(omatpl.fig_3d, anim.animate, frames=len(points), fargs=(points, bestResult, gv.textReachBacterial, 'o',),interval=gv.SPEED, repeat=False)

Lab2/frontshow/calc_algorithm/beesShow.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ def call_Bees(arr_textField) -> None:
2727
numBees = int(arr_textField[4].get())
2828
time = int(arr_textField[5].get())
2929
rezusl, points = algorithm_of_bees(min_x, max_x, min_y, max_y, numBees, gv.current_function, time)
30-
bestResult = [rezusl[0][0], rezusl[0][1], rezusl[1], colors.Color.CYAN.value, "o", 70]
30+
bestResult = [rezusl[0][0], rezusl[0][1], rezusl[1], colors.Color.CYAN.value, "o", 50]
3131

3232
_ = omatpl.FuncAnimation(omatpl.fig_3d, anim.animate, frames=len(points), fargs=(points, bestResult, gv.textReachBees, 'o',),interval=gv.SPEED, repeat=False)
3333

Lab2/frontshow/calc_algorithm/geneticAlgorithmShow.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ def call_geneticsAlgorithm(tf_populationSize,tf_numGeneratics,lab_optimalFunc,la
2121
lab_optimalValuePoints.configure(text="Оптимальное значение функции: " + str(round(best_fitness,3)))
2222
lab_optimalFunc.configure(text="Оптимальное значение переменных: " + str(round(best_solution[0])) + " : " + str(round(best_solution[1])))
2323

24-
bestResult = [best_solution[0], best_solution[1], best_fitness,colors.Color.YELLOW.value,"o",70]
24+
bestResult = [best_solution[0], best_solution[1], best_fitness,colors.Color.YELLOW.value,"o",50]
2525

2626
_ = omatpl.FuncAnimation(omatpl.fig_3d, anim.animate, frames=len(points), fargs=(points, bestResult, gv.textReachGenetic, 'v',), interval=gv.SPEED, repeat=False)
2727
gv.canvas_3d.draw()

Lab2/frontshow/calc_algorithm/hybridShow.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ def call_hybridAlgorithm(tf_populationSize,tf_numGeneratics,lab_optimalFunc,lab_
2525
lab_optimalValuePoints.configure(text="Оптимальное значение функции: " + str(round(best_solution[2],3)))
2626
lab_optimalFunc.configure(text="Оптимальное значение переменных: " + str(round(best_solution[0])) + " : " + str(round(best_solution[1])))
2727

28-
bestResult = [best_solution[0], best_solution[1], best_solution[2],colors.Color.WHITE.value,"o",70]
28+
bestResult = [best_solution[0], best_solution[1], best_solution[2],colors.Color.WHITE.value,"o",50]
2929
points = getMatrixFromMatrixList(points)
3030
_ = omatpl.FuncAnimation(omatpl.fig_3d, anim.animate, frames=len(points), fargs=(points, bestResult, gv.textReachHybrid, 'o',), interval=gv.SPEED, repeat=False)
3131
gv.canvas_3d.draw()

Lab2/frontshow/calc_algorithm/swarmShow.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ def call_Swarm(arr_textField) -> None:
2424
#print("РЕЗУЛЬТАТ:", a.globalBestScore, "В ТОЧКЕ:", a.globalBestPos)
2525

2626
# bestPointSet.append(ax_3d.scatter(a.globalBestPos[0], a.globalBestPos[1], a.globalBestScore, c=Color.BLUE.value, marker="o", s=250))
27-
bestResult = [a.globalBestPos[0],a.globalBestPos[1],a.globalBestScore,colors.Color.BLUE.value, "o",70]
27+
bestResult = [a.globalBestPos[0],a.globalBestPos[1],a.globalBestScore,colors.Color.BLUE.value, "o",50]
2828
points = deleteDuplicateValue(points)
2929
_ = omatpl.FuncAnimation(omatpl.fig_3d, anim.animate, frames=len(points), fargs=(points,bestResult, gv.textReachSwarm,'x',), interval=gv.SPEED, repeat=False)
3030
gv.canvas_3d.draw()

Lab2/frontshow/methods.py

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import outer_imports.imports_tkinter as otk
22
import numpy as np
33
from outer_imports.matplotlib import fig_3d
4-
from frontshow.Color import ColorFigure
4+
from Lab2.frontshow.Color import ColorFigure
55
import global_variable as gv
66
from Lab2.setFunction import chooseFunc
77

@@ -20,12 +20,10 @@ def buildBaseFunction(ax_3d):
2020
gv.x_data = np.arange(gv.START, gv.END, gv.STEP)
2121
gv.y_data = np.arange(gv.START, gv.END, gv.STEP)
2222

23-
24-
2523
X, Y = np.meshgrid(gv.x_data, gv.y_data)
2624
Z = gv.current_function(X, Y)
27-
28-
ax_3d.plot_surface(X, Y, Z, cmap=ColorFigure.INFERNO.value,alpha=0.8, antialiased=True,rstride=1, cstride=1,zorder=-1)
25+
#plot_wireframe
26+
ax_3d.plot_surface(X, Y, Z, cmap=ColorFigure.WINTER.value,alpha=0.8,rstride=1, cstride=1,zorder=0)
2927
gv.canvas_3d.draw()
3028

3129
def selectFunc(event,ax_3d,combo,lab,textField):
@@ -51,7 +49,6 @@ def selectFunc(event,ax_3d,combo,lab,textField):
5149

5250
def save_plot():
5351
try:
54-
# Save the 3D plot to a file
5552
file_path = otk.filedialog.asksaveasfilename(defaultextension=".png", filetypes=[("PNG files", "*.png")])
5653
if file_path:
5754
fig_3d.savefig(file_path)

Lab2/frontshow/placement_elements.py

Lines changed: 25 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4,31 +4,34 @@
44

55
class createLabel:
66
@staticmethod
7-
def placement_label(root, text, row, column, padx, rowspan, columnspan, pady):
7+
def placement_label(root, text, row, column, padx, rowspan, columnspan, pady,sticky=None):
88
label = otk.ttk.Label(root, text=text)
9-
label.grid(row=row, column=column, padx=padx, rowspan=rowspan, columnspan=columnspan, pady=pady)
9+
if(sticky != None):
10+
label.grid(row=row, column=column, padx=padx, rowspan=rowspan, columnspan=columnspan, pady=pady,sticky=sticky)
11+
else:
12+
label.grid(row=row, column=column, padx=padx, rowspan=rowspan, columnspan=columnspan, pady=pady)
1013
return label
1114

1215

1316
def createTab_gradient(tab, call_function):
14-
createLabel.placement_label(tab, "Количество итераций", 0, 1, 5, 1, 3, 5)
17+
createLabel.placement_label(tab, "Количество итераций", 0, 1, 5, 1, 1, 5)
1518
textFieldCountIter = otk.ttk.Entry(tab)
16-
textFieldCountIter.insert(0, "500")
19+
textFieldCountIter.insert(0, "100")
1720

1821
findMinGradientDescent_button = otk.ttk.Button(tab, text="Выполнить градиентный спуск",
1922
command=lambda: call_function(textFieldCountIter))
20-
textFieldCountIter.grid(row=1, column=1, padx=5, pady=5, rowspan=1, columnspan=3, sticky="nsew")
21-
findMinGradientDescent_button.grid(row=2, column=1, columnspan=3, padx=5, pady=5, sticky="nsew")
23+
textFieldCountIter.grid(row=1, column=1, padx=5, pady=5, rowspan=1, columnspan=10, sticky="ew")
24+
findMinGradientDescent_button.grid(row=2, column=1, columnspan=1, padx=5, pady=5, sticky="nsew")
2225

23-
gv.textReachGradientPoint = otk.ScrolledText(tab, height=10, width=30)
24-
gv.textReachGradientPoint.grid(row=3, column=1, columnspan=3, padx=5, pady=5, sticky="nsew")
26+
gv.textReachGradientPoint = otk.ScrolledText(tab, width=70)
27+
gv.textReachGradientPoint.grid(row=3,rowspan=1, column=1, padx=5, pady=5, sticky="nsew")
2528

2629

2730
def createTab_simpleMethod(tab, call_function):
2831
findQud_btn = otk.ttk.Button(tab, text='Вызов симплекс метода', command=lambda: call_function())
2932
findQud_btn.grid(row=0, column=1, columnspan=3, padx=5, pady=5, sticky="nsew")
3033

31-
gv.textReachQuadPoint = otk.ScrolledText(tab, height=10, width=30)
34+
gv.textReachQuadPoint = otk.ScrolledText(tab, width=70)
3235
gv.textReachQuadPoint.grid(row=1, column=1, columnspan=3, padx=5, pady=5, sticky="nsew")
3336

3437

@@ -56,49 +59,49 @@ def createTab_genetic_hybrid(tab, call_function, text_btn):
5659
def createTab_Genetic(tab, call_function):
5760
createTab_genetic_hybrid(tab, call_function, "Вызвать генетический")
5861

59-
gv.textReachGenetic = otk.ScrolledText(tab, height=10, width=30)
62+
gv.textReachGenetic = otk.ScrolledText(tab, height=18,width=70)
6063
gv.textReachGenetic.grid(row=7, column=1, columnspan=3, padx=5, pady=5, sticky="nsew")
6164

6265

6366
def createTab_Hybrid(tab, call_function):
6467
createTab_genetic_hybrid(tab, call_function, "Вызвать гибрид")
6568

66-
gv.textReachHybrid = otk.ScrolledText(tab, height=10, width=30)
69+
gv.textReachHybrid = otk.ScrolledText(tab, height=18, width=70)
6770
gv.textReachHybrid.grid(row=7, column=1, columnspan=3, padx=5, pady=5, sticky="nsew")
6871

6972

7073
def createTab_Swarm(tab, call_function):
7174
tf_swarm = []
7275

73-
createLabel.placement_label(tab, "Размер Роя", 0, 0, 5, 1, 1, 5)
76+
createLabel.placement_label(tab, "Размер Роя", 0, 0, 5, 1, 1, 5,sticky="e")
7477
tF = otk.ttk.Entry(tab)
7578
tF.insert(0, "50")
7679
tF.grid(row=0, column=1, padx=5, pady=5, rowspan=1, columnspan=2, sticky="nsew")
7780
tf_swarm.append(tF)
7881

79-
createLabel.placement_label(tab, "Общий масштабирующий\n коэффициент для скорости", 1, 0, 5, 1, 1, 5)
82+
createLabel.placement_label(tab, "Общий масштабирующий коэффициент для скорости", 1, 0, 5, 1, 1, 5,sticky="e")
8083
tF = otk.ttk.Entry(tab)
8184
tF.insert(0, "0.1")
8285
tF.grid(row=1, column=1, padx=5, pady=5, rowspan=1, columnspan=2, sticky="nsew")
8386
tf_swarm.append(tF)
8487

8588
createLabel.placement_label(tab,
86-
"Коэффициент, задающий влияние лучшей точки,\n найденной каждой частицей,\n на будущую скорость",
87-
2, 0, 5, 1, 1, 5)
89+
"Коэффициент, задающий влияние лучшей точки, найденной каждой частицей,\n на будущую скорость",
90+
2, 0, 5, 1, 1, 5,sticky="e")
8891
tF = otk.ttk.Entry(tab)
8992
tF.insert(0, "1")
9093
tF.grid(row=2, column=1, padx=5, pady=5, rowspan=1, columnspan=2, sticky="nsew")
9194
tf_swarm.append(tF)
9295

9396
createLabel.placement_label(tab,
94-
"Коэффициент, задающий влияние лучшей точки,\n найденной всеми частицами,\n на будущую скорость",
95-
3, 0, 5, 1, 1, 5)
97+
"Коэффициент, задающий влияние лучшей точки, найденной всеми частицами,\n на будущую скорость",
98+
3, 0, 5, 1, 1, 5,sticky="e")
9699
tF = otk.ttk.Entry(tab)
97100
tF.insert(0, "5")
98101
tF.grid(row=3, column=1, padx=5, pady=5, rowspan=1, columnspan=2, sticky="nsew")
99102
tf_swarm.append(tF)
100103

101-
createLabel.placement_label(tab, "Количество жизней", 4, 0, 5, 1, 1, 5)
104+
createLabel.placement_label(tab, "Количество жизней", 4, 0, 5, 1, 1, 5,sticky="e")
102105
tF = otk.ttk.Entry(tab)
103106
tF.insert(0, "100")
104107
tF.grid(row=4, column=1, padx=5, pady=5, rowspan=1, columnspan=2, sticky="nsew")
@@ -119,7 +122,7 @@ def createTab_Swarm(tab, call_function):
119122
btn = otk.ttk.Button(tab, text='Вызвать рой', command=lambda: call_function(tf_swarm))
120123
btn.grid(row=5, column=0, columnspan=3, padx=5, pady=5, sticky="nsew")
121124

122-
gv.textReachSwarm = otk.ScrolledText(tab, height=10, width=30)
125+
gv.textReachSwarm = otk.ScrolledText(tab, height=15, width=70)
123126
gv.textReachSwarm.grid(row=6, column=0, columnspan=3, padx=5, pady=5, sticky="nsew")
124127

125128

@@ -169,19 +172,19 @@ def createTab_insects(tab, text_count, count, text_generation, count_generations
169172
def createTab_Bees(tab, call_function):
170173
createTab_insects(tab, "Количество пчелок", 200, "Время(мс)", 100, "Вызвать пчелок", call_function)
171174

172-
gv.textReachBees = otk.ScrolledText(tab, height=10, width=30)
175+
gv.textReachBees = otk.ScrolledText(tab, height=18, width=70)
173176
gv.textReachBees.grid(row=7, column=0, columnspan=3, padx=5, pady=5, sticky="nsew")
174177

175178

176179
def createTab_Bacterial(tab, call_function):
177180
createTab_insects(tab, "Количество бактерий", 200, "Время(мс)", 100, "Вызвать бактерии", call_function)
178181

179-
gv.textReachBacterial = otk.ScrolledText(tab, height=10, width=30)
182+
gv.textReachBacterial = otk.ScrolledText(tab, height=18, width=70)
180183
gv.textReachBacterial.grid(row=7, column=0, columnspan=3, padx=5, pady=5, sticky="nsew")
181184

182185

183186
def createTab_ImmuneSystem(tab, call_function):
184187
createTab_insects(tab, "Размер популяции", 200, "Генераций", 500, "Вызвать имунную систему", call_function)
185188

186-
gv.textReachImmuneSystem = otk.ScrolledText(tab, height=10, width=30)
189+
gv.textReachImmuneSystem = otk.ScrolledText(tab, height=18, width=70)
187190
gv.textReachImmuneSystem.grid(row=7, column=0, columnspan=3, padx=5, pady=5, sticky="nsew")

Lab2/main.py

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
notebook.add(frame4, text="Рой")
4242
notebook.add(frame5, text="Пчелки")
4343
notebook.add(frame6, text="Бактерии")
44-
notebook.add(frame7, text="Имунная система")
44+
notebook.add(frame7, text="Иммунная система")
4545
notebook.add(frame8, text="Гибрид")
4646

4747
createTab_gradient(frame1,callGradient_DrawPoint)
@@ -72,25 +72,23 @@
7272
"Химмельблау"],state="readonly")
7373
comboBoxFunc.bind("<<ComboboxSelected>>", lambda event, cb=comboBoxFunc,lab = lab_func,field=textFieldStep: selectFunc(event, ax_3d,cb,lab,field))
7474

75-
canvas_3d_widget.grid(row=0, column=0, rowspan=20, padx=5, pady=5) #matplotlib
76-
notebook.grid(row=0,column=1,padx=5,pady=5,rowspan=1,columnspan=3,sticky="nsew")
75+
canvas_3d_widget.grid(row=0, column=0, padx=5, pady=0) #matplotlib
76+
notebook.grid(row=0,column=1,padx=5,pady=0,columnspan=5,sticky="nsew")
7777

7878
comboBoxFunc.grid(row=4,column=1,padx=5,pady=5,rowspan=1,columnspan=3,sticky="nsew")
7979
textFieldStep.grid(row=2, column=1,padx=5, pady=5,rowspan=1,columnspan=3,sticky="nsew")
8080

8181

8282
clear_btn = ttk.Button(root, text="Очистить точки с графика", command=clearPoints)
83-
clear_btn.grid(row=8, column=1, columnspan=3, padx=5, pady=5, sticky="nsew")
84-
save_button = ttk.Button(root, text="Сохранить график", command=save_plot)
83+
clear_btn.grid(row=2, column=0, columnspan=3, padx=5, pady=5, sticky="nsew")
8584

86-
save_button.grid(row=9, column=1, columnspan=3, padx=5, pady=5, sticky="nsew")
85+
save_button = ttk.Button(root, text="Сохранить график", command=save_plot)
86+
save_button.grid(row=3, column=0, columnspan=3, padx=5, pady=5, sticky="nsew")
8787
close_button = ttk.Button(root, text="Закрыть приложение", command=lambda: close_application(root))
88-
close_button.grid(row=10, column=1, columnspan=3, padx=5, pady=5, sticky="nsew")
88+
close_button.grid(row=4, column=0, columnspan=3, padx=5, pady=5, sticky="nsew")
8989

9090

91-
root.grid_rowconfigure(0, weight=1)
9291
root.grid_rowconfigure(12, weight=1)
93-
root.grid_columnconfigure(0, weight=1)
9492
root.grid_columnconfigure(3, weight=1)
9593

9694
root.mainloop()

0 commit comments

Comments
 (0)