Arkadaşlar diğer başlıkta bir yanlış anlaşılma olduğu kanaatindeyiz.
Teknik konularda bilgi sahibi olmadan fikir sahibi olunmaz.
Örneğin limonun fiyatını herkes konuşabilir.
Ancak teknik konularda soru sormak için bile bilgi birikimi gerekir.
Yapay zekanın ne olduğunu anladığını düşünenler zamanında Ubuntu forumlarında sorduğumuz 8 bilmece problemini kağıt üzerinde çözsünler.
Zamanında Akın Robotik’e iş mülakatı için müracaat etmiştik. Geliştirmemizi istedikleri uygulama 8 bilmece probleminin çok daha basit ama görsel sürümü idi.
Uzmanlık alanımız yapay zeka olmasa da konu ile bir parça ilgiliyiz.
İlk kez giriş yaptıktan ve soruları yanıtladıktan sonra, verdiğim yanıtların yapay zeka tarafından oluşturulduğunu mu düşündünüz? Gönderi biçimlendirmesine dikkat ederek, düzgün ve saygılı bir Türkçe kullanıp, konuya hakim yanıtlar verdiğimde, aklınıza gelen ilk şey yapay zeka ile kopyala yapıştır yapmak mı oldu?
Bu aşağılayıcı bir ifade, gereksiz özgüvenli ve yapay zeka hakkında hiçbir fikriniz olmadığını düşünüyorum.
“8 bilmece problemi” hakkında konuşmama bile gerek yok, bu şekilde abartılı bir şekilde anlatmanız komik.
45 dakikada kullanıcı arayüzünü de dahil ederek kodladım. Eğer zaman ayırırsam, en fazla 3-4 saat içinde çok daha optimize edilmiş ve karma tablolarıyla daha gelişmiş bir algoritma yazabilirim.
8 bilmece probleminin yapay zeka ile bir ilgisi yok.
import tkinter as tk
from tkinter import messagebox
import heapq
import random
class State:
def __init__(self, board, parent=None, move=None, cost=0):
self.board = board
self.parent = parent
self.move = move
self.cost = cost
self.size = len(board)
self.goal_board = self.generate_goal_board()
self.heuristic = self._calculate_heuristic()
def generate_goal_board(self):
goal_board = [[0] * self.size for _ in range(self.size)]
num = 1
for i in range(self.size):
for j in range(self.size):
goal_board[i][j] = num
num = (num + 1) % (self.size ** 2)
goal_board[self.size - 1][self.size - 1] = 0
return goal_board
def _calculate_heuristic(self):
distance = 0
linear_conflict = 0
for i in range(self.size):
for j in range(self.size):
num = self.board[i][j]
if num != 0:
x, y = divmod(num - 1, self.size)
distance += abs(x - i) + abs(y - j)
if x == i:
for k in range(j + 1, self.size):
other = self.board[i][k]
if other != 0 and other // self.size == x and other < num:
linear_conflict += 2
if y == j:
for k in range(i + 1, self.size):
other = self.board[k][j]
if other != 0 and other % self.size == y and other < num:
linear_conflict += 2
return distance + linear_conflict
def __lt__(self, other):
return (self.cost + self.heuristic) < (other.cost + other.heuristic)
def get_neighbors(self):
neighbors = []
x, y = next((i, j) for i in range(self.size) for j in range(self.size) if self.board[i][j] == 0)
for dx, dy, move in [(1, 0, 'aşağı'), (-1, 0, 'yukarı'), (0, 1, 'sağ'), (0, -1, 'sol')]:
nx, ny = x + dx, y + dy
if 0 <= nx < self.size and 0 <= ny < self.size:
new_board = [row[:] for row in self.board]
new_board[x][y], new_board[nx][ny] = new_board[nx][ny], new_board[x][y]
neighbors.append(State(new_board, self, move, self.cost + 1))
return neighbors
def astar_search(start, goal):
open_list = []
heapq.heappush(open_list, start)
closed_set = set()
while open_list:
current = heapq.heappop(open_list)
if current.board == goal:
path = []
while current.move is not None:
path.append(current)
current = current.parent
return path[::-1]
closed_set.add(tuple(map(tuple, current.board)))
for neighbor in current.get_neighbors():
if tuple(map(tuple, neighbor.board)) not in closed_set:
heapq.heappush(open_list, neighbor)
return None
def solve_puzzle(start_board, size):
goal_board = [[0] * size for _ in range(size)]
num = 1
for i in range(size):
for j in range(size):
goal_board[i][j] = num
num = (num + 1) % (size ** 2)
goal_board[size - 1][size - 1] = 0
start_state = State(start_board)
solution = astar_search(start_state, goal_board)
if solution:
steps = len(solution)
steps_text = " -> ".join(step.move for step in solution)
display_solution(start_board, solution)
messagebox.showinfo("Çözüm bulundu", f"Çözüm: {steps_text}\n\nAdım sayısı: {steps}")
else:
messagebox.showinfo("Çözüm Yok", "Çözüm bulunamadı.")
def create_entry_fields(root, size):
entry_fields = []
for i in range(size):
row = []
for j in range(size):
entry = tk.Entry(root, width=5, font=('Arial', 14), justify='center')
entry.grid(row=i+2, column=j, padx=10, pady=10)
row.append(entry)
entry_fields.append(row)
return entry_fields
def fill_randomly(entry_fields, size):
numbers = list(range(size * size))
random.shuffle(numbers)
for i in range(size):
for j in range(size):
entry_fields[i][j].delete(0, tk.END)
entry_fields[i][j].insert(0, str(numbers.pop(0)))
def on_puzzle_size_button_click(root, size_entry):
try:
size = int(size_entry.get())
if size < 2:
raise ValueError("Bulmaca boyutu en az 2 olmalıdır.")
entry_fields = create_entry_fields(root, size)
def on_solve_button_click():
try:
start_board = []
values = set()
for i in range(size):
row = []
for j in range(size):
value = int(entry_fields[i][j].get())
if value in values or value < 0 or value >= size ** 2:
raise ValueError("Geçersiz girdi")
values.add(value)
row.append(value)
start_board.append(row)
solve_puzzle(start_board, size)
except ValueError as e:
messagebox.showerror("Geçersiz girdi", str(e))
solve_button = tk.Button(root, text="Çöz", font=('Arial', 16, 'bold'), command=on_solve_button_click)
solve_button.grid(row=size+2, columnspan=size, pady=10)
random_button = tk.Button(root, text="Rastgele Doldur", font=('Arial', 16, 'bold'), command=lambda: fill_randomly(entry_fields, size))
random_button.grid(row=size+3, columnspan=size, pady=10)
except ValueError as e:
messagebox.showerror("Geçersiz girdi", str(e))
def display_solution(start_board, solution):
solution_window = tk.Toplevel()
solution_window.title("Çözüm Adımları")
size = len(start_board)
board = start_board
for step in solution:
frame = tk.Frame(solution_window)
frame.pack(pady=5)
board = step.board
for i in range(size):
row_frame = tk.Frame(frame)
row_frame.pack(side=tk.TOP)
for j in range(size):
label = tk.Label(row_frame, text=str(board[i][j]), font=('Arial', 14), width=4, height=2, borderwidth=2, relief="groove")
label.pack(side=tk.LEFT)
step_label = tk.Label(solution_window, text=f"Adım: {step.move}", font=('Arial', 12))
step_label.pack()
def create_gui():
root = tk.Tk()
root.title("Bulmaca Çözücü")
size_label = tk.Label(root, text="Bulmaca boyutunu girin (örneğin, 3x3 bulmaca için 3):", font=('Arial', 12))
size_label.grid(row=0, column=0, padx=10, pady=10)
size_entry = tk.Entry(root, width=5, font=('Arial', 14), justify='center')
size_entry.grid(row=0, column=1, padx=10, pady=10)
puzzle_size_button = tk.Button(root, text="Bulmaca Boyutu", font=('Arial', 16, 'bold'), command=lambda: on_puzzle_size_button_click(root, size_entry))
puzzle_size_button.grid(row=1, columnspan=2, pady=10)
root.mainloop()
def main():
create_gui()
if __name__ == "__main__":
main()
Yine derslere göz attım ancak kayda değer hiçbir konu bulamadım. Sadece Python ve veri yapılarının temelleri ile birlikte temel matematik dersleri var.
Bu durumu kodlamak için zaman harcamaya değmez, karar ağacı veya ağaç budama yöntemleri ile kolaylıkla çözülebilir.
İlk konuda yazdığınız fikriniz ile çelişiyor.
Muhtemelen bu kadar büyük bir sayfanın gönderileri API istekleri ile işlenip yanıtlar üretiliyor. Ayrıca, kimse sayfasının verilerini makine öğrenme modellerinin eğitimi için vermek istemez. Bu forumda API ile cevap üreten ya da kopyala-yapıştır yapan kimse yok.
Daha uzun ve çok sayıda cevap verilebilir ancak üslubunuzu beğenmediğim için detaylı bir açıklama yapmıyorum.
Sevgili genç arkadaşlarım , eğer ki bir yazılım faydalı işlerde kullanılırsa faydalıdır. Atomun çekirdeğini parçalayanlar atom bombası yapılsın diye parçalamadılar. Faydalı işlerde kullanılmayan hiç bir yazılım güvenli değildir. Yapay zeka da bunlardan birisidir. Bu türlü olumsuz anlaşılacak tartışmalara gerek yok. Önemli olan insanlık yararına güzel olumlu şeyler üretebilmektir.