-
Trình Thực Thi
Trình biên dịch Python Trình biên dịch C++ Trình biên dịch C Trình biên dịch Matplotlib Trình thông dịch Node.js Trình thông dịch PHP Trình biên dịch C# / .NET Trình biên dịch Rust Ruby Interpreter Trình biên dịch Java Trình biên dịch Go Trình biên dịch Kotlin Trình biên dịch Swift Trình biên dịch TypeScript
-
Học lập trình
Học Python Ví dụ chạy được, NumPy, pandas và nhiều nội dung khác Học AIMạng nơ-ron, học máy và LLM từ đầu Học C và C++ Con trỏ, bộ nhớ, STL và C++ hiện đại Học C#C# cơ bản, OOP, LINQ, async và bài tập .NET Học MatplotlibBiểu đồ đường, cột, phân tán và tròn với visualizer tương tác Thuật toán Python Tìm kiếm, sắp xếp, đệ quy và trình mô phỏng O(n) Thuật toán C và C++ So sánh cách cài đặt bằng C và C++ Lập trình cho trẻ em Vừa chơi vừa học lập trình!
- Thử tháchMới
- Cho giáo viênMới
- Cập Nhật mới nhất
- Mời mình một ly cà phê
Q-learning học xem mỗi hành động tốt đến đâu trong mỗi trạng thái, Q(s, a), chỉ từ trải nghiệm. Sau khi thực hiện hành động a ở trạng thái s, nhận reward và đến trạng thái s':
- target = reward, nếu tập (episode) đã kết thúc (
done= 1) - target = reward + gamma × max theo a' của Q(s', a'), ngược lại
- Q(s, a) ← Q(s, a) + alpha × (target - Q(s, a))
Bắt đầu với mọi giá trị Q bằng 0 và áp dụng các bước chuyển theo thứ tự.
Hãy viết q_learning(num_states, num_actions, transitions, alpha, gamma).
Đầu vào
num_states, num_actions: Kích thước bảng.
transitions: Mỗi bước một hàng [state, action, reward, next_state, done].
alpha: Tốc độ học.
gamma: Hệ số chiết khấu.
Đầu ra
Trả về bảng Q dưới dạng ma trận, mỗi hàng là một trạng thái và mỗi cột là một hành động.
Ràng buộc
1 ≤ num_states, num_actions ≤ 100, 0 ≤ số bước chuyển ≤ 10.000
-100 ≤ reward ≤ 100, done là 0 hoặc 1
0 < alpha ≤ 1, 0 ≤ gamma ≤ 1
Ví dụ
Ví dụ 1
Đầu vào:
num_states = 2
num_actions = 2
transitions = [
[0, 1, 0, 1, 0],
[1, 0, 10, 0, 1]
]
alpha = 0.5
gamma = 0.9
Kết quả mong đợi:
[
[0.0, 0.0],
[5.0, 0.0]
]
Giải thích
Bước đầu chưa có phần thưởng: target = 0 + 0.9 × max(Q[1]) = 0, nên Q[0][1] vẫn là 0. Bước thứ hai kết thúc tập với phần thưởng 10: Q[1][0] = 0 + 0.5 × (10 - 0) = 5.
Ví dụ 2
Đầu vào:
num_states = 2
num_actions = 2
transitions = [
[1, 0, 10, 0, 1],
[0, 1, 0, 1, 0]
]
alpha = 0.5
gamma = 0.9
Kết quả mong đợi:
[
[0.0, 2.25],
[5.0, 0.0]
]
Giải thích
Cùng các bước nhưng theo thứ tự ngược lại. Q[1][0] thành 5 trước, nên bước từ trạng thái 0 giờ thấy giá trị đó: target = 0 + 0.9 × 5 = 4.5 và Q[0][1] = 0.5 × 4.5 = 2.25. Phần thưởng đã lan ngược lại một trạng thái.
Tham khảo
-
Ví dụ 1 Chưa chạyĐầu vào:
num_states = 2 num_actions = 2 transitions = [ [0, 1, 0, 1, 0], [1, 0, 10, 0, 1] ] alpha = 0.5 gamma = 0.9Kết quả mong đợi:[ [0.0, 0.0], [5.0, 0.0] ]Kết quả của bạn -
Ví dụ 2 Chưa chạyĐầu vào:
num_states = 2 num_actions = 2 transitions = [ [1, 0, 10, 0, 1], [0, 1, 0, 1, 0] ] alpha = 0.5 gamma = 0.9Kết quả mong đợi:[ [0.0, 2.25], [5.0, 0.0] ]Kết quả của bạn
Có 4 kiểm tra ẩn sẽ chạy khi bạn nộp bài. Nếu code chưa vượt qua một bài, bạn sẽ thấy bài đó. Giải xong thử thách để xem tất cả.
Trình biên dịch Java online
Viết, biên dịch, chạy và gỡ lỗi code Java trực tuyến trong IDE đầy đủ tính năng. Làm việc với nhiều tệp, lưu workspace, chia sẻ và cộng tác theo thời gian thực mà không cần cài đặt.
🚀 260,408 tổng số lượt thực thi (5,854 trong tháng này)
Luyện Java với thử thách lập trình
Giải các bài tập thực tế ngay trên trình soạn thảo này: chạy kiểm thử mẫu, nộp bài và nhận đánh giá code từ AI.
☕ Giới thiệu về Trình thực thi Java trực tuyến này
CodeUtility Java Executor cho phép bạn viết và chạy chương trình Java trực tiếp trên trình duyệt - không cần cài đặt, cấu hình JDK hay IDE. Nó được vận hành bởi một sandbox an toàn hỗ trợ các phiên bản môi trường chạy Java thực 8, 11, 17, 21 và mới nhất.
Công cụ này biên dịch và thực thi mã Java trên đám mây bằng trình biên dịch javac thật và môi trường chạy Java thực,
vì vậy bạn có thể kiểm thử lớp, phương thức và logic đúng như khi chạy cục bộ.
Dù bạn đang luyện lập trình hướng đối tượng, chuẩn bị phỏng vấn, hay thử các đoạn mã trước khi tích hợp, CodeUtility Java Executor cung cấp một môi trường nhanh và đáng tin cậy để chạy mã Java thực ngay lập tức từ bất kỳ thiết bị nào.
Không chỉ là công cụ chạy mã
Sử dụng trình soạn thảo nhiều tệp, terminal thực thi biệt lập, thư viện riêng theo môi trường chạy, không gian làm việc lâu dài, tính năng chia sẻ và cộng tác theo thời gian thực ngay trong cùng một trình thực thi.
Cách sử dụng trình thực thi này?
Chọn môi trường chạy, mở hoặc tạo tệp, viết mã rồi nhấn Chạy. Kết quả xuất hiện trong terminal; người dùng đã đăng nhập có thể lưu tệp trong không gian làm việc, cài thư viện và cộng tác qua liên kết chia sẻ.
- Chọn phiên bản rồi chỉnh sửa tệp hiện tại hoặc mở một tệp khác trong không gian làm việc.
- Chạy mã, nhập dữ liệu trong terminal khi được yêu cầu và xem lại lịch sử chạy đã lưu.
- Sử dụng thư viện, công cụ không gian làm việc, chia sẻ và trò chuyện khi tác vụ cần nhiều hơn một đoạn mã.
💡 Kiến thức cơ bản về Java & Ví dụ bạn có thể thử ở trên
1. Khai báo biến và hằng
Java yêu cầu bạn khai báo kiểu của từng biến. Dùng final cho hằng số.
int age = 30;
double pi = 3.14159;
char grade = 'A';
String name = "Alice";
boolean isActive = true;
// Hằng số
final int MAX_USERS = 100;
final String COMPANY = "CodeUtility";
2. Điều kiện (if / switch)
Dùng if, else if và switch để điều khiển luồng.
int x = 2;
if (x == 1) {
System.out.println("Một");
} else if (x == 2) {
System.out.println("Hai");
} else {
System.out.println("Khác");
}
switch (x) {
case 1:
System.out.println("Một");
break;
case 2:
System.out.println("Hai");
break;
default:
System.out.println("Khác");
}
3. Vòng lặp
Dùng for, while và do-while để lặp.
for (int i = 0; i < 3; i++) {
System.out.println(i);
}
int n = 3;
while (n > 0) {
System.out.println(n);
n--;
}
4. Mảng
Mảng chứa dãy phần tử cùng kiểu với kích thước cố định.
int[] numbers = {10, 20, 30};
System.out.println(numbers[1]);
5. Thao tác với ArrayList
Dùng ArrayList cho danh sách có kích thước động.
import java.util.ArrayList;
ArrayList<Integer> nums = new ArrayList<>();
nums.add(1);
nums.add(2);
nums.add(3);
nums.remove(Integer.valueOf(2));
for (int num : nums) {
System.out.print(num + " ");
}
6. Nhập/Xuất console
Dùng Scanner để nhập và System.out để xuất.
import java.util.Scanner;
Scanner scanner = new Scanner(System.in);
System.out.print("Nhập tên của bạn: ");
String name = scanner.nextLine();
System.out.println("Xin chào, " + name);
7. Hàm
Định nghĩa phương thức với kiểu trả về và tham số.
public static int add(int a, int b) {
return a + b;
}
System.out.println(add(3, 4));
8. HashMap
Dùng HashMap để lưu trữ cặp khóa-giá trị.
import java.util.HashMap;
HashMap<String, Integer> ages = new HashMap<>();
ages.put("Alice", 30);
System.out.println(ages.get("Alice"));
9. Xử lý ngoại lệ
Dùng try và catch để xử lý ngoại lệ lúc chạy.
try {
throw new Exception("Đã xảy ra sự cố");
} catch (Exception e) {
System.out.println(e.getMessage());
}
10. I/O tệp
Dùng Files và Paths từ java.nio.file để làm việc với tệp.
import java.nio.file.*;
import java.io.IOException;
Files.writeString(Paths.get("file.txt"), "Xin chào, tệp");
String content = Files.readString(Paths.get("file.txt"));
System.out.println(content);
11. Thao tác với chuỗi
Chuỗi trong Java hỗ trợ nhiều phương thức như length(), substring() và contains().
String text = "Hello World";
System.out.println(text.length());
System.out.println(text.substring(0, 5));
System.out.println(text.contains("World"));
12. Lớp & Đối tượng
Java hỗ trợ lập trình hướng đối tượng bằng các lớp và thể hiện.
class Person {
String name;
Person(String name) {
this.name = name;
}
void greet() {
System.out.println("Chào, tôi là " + name);
}
}
Person p = new Person("Alice");
p.greet();