trongdungs
Thành viên hoạt động



- Tham gia
- 19/5/09
- Bài viết
- 147
- Được thích
- 13
- Nghề nghiệp
- sinh vien
Tối ưu cái gì thì nêu bài toán ra cho mọi người biết chứ? Bạn gửi file đó lên rồi không có dòng chú thích nào, chơi trò "ai nói trước là thua" hử?Mình sử dụng Solver để tính bài toán tối ưu, nhưng dữ liệu hơi nhiều, Solver không tính được. Vậy có cách nào để giải bài toán không? mọi người chỉ giúp mình với!
file excel đính kèm mình đã có công thức sẵn rồi màTối ưu cái gì thì nêu bài toán ra cho mọi người biết chứ? Bạn gửi file đó lên rồi không có dòng chú thích nào, chơi trò "ai nói trước là thua" hử?
Chưa ra kết quả có thể do: Chạy phép thử chưa đủ nhiều, máy tính cấu hình yếu chạy lâu, sai số quá nhỏ... thử tăng "Constraint Precision" lên xem...
F36=MIN($E36*2-SUM($E36:E36),F$66-SUM(F$35:F35))
Solver của bạn có số lượng ô phải tìm lớn hơn khả năng cho phép.Mình sử dụng Solver để tính bài toán tối ưu, nhưng dữ liệu hơi nhiều, Solver không tính được. Vậy có cách nào để giải bài toán không? mọi người chỉ giúp mình với!
$F$36:$N$64>=0
$F$65:$N$65<=$F$66:$N$66
$O$36:$O$64<=$P$36:$P$64
với dữ liệu F4:N32 mỗi dòng chỉ có 1 số thì ô P34 chỉ có 1 kết quả duy nhất, làm gì có Max? không chọn mục tiêu là ô P34, mà chọn mục tiêu là tổng diện tích.file excel đính kèm mình đã có công thức sẵn rồi mà
View attachment 177364
mục tiêu là ô p34 đạt max
Vùng dữ liệu là F36:N64
điều kiện F36:N64>=0
O36:O64 <= P36: P64 (tương ứng từng dòng 1)
F65:N65 <= F66:N66 (tương ứng từng cột 1)
Đúng là nhiều ô cho kết quả bằng 0, cài này hợp lý. Cách khai báo của bạn hay mình sẽ thử.Solver của bạn có số lượng ô phải tìm lớn hơn khả năng cho phép.
Với solver kèm theo office như tôi được biết thì số ẩn có thể giải được là <=200 và khoảng 800 ràng buộc.
Của bạn là 29*9=261 > 200=> solver không chạy. Nếu bạn giảm số ô xuống <=200 sẽ thấy nó chạy như thường. Tất nhiên là kết quả thu được còn tùy thuộc các ràng buộc mà bạn nạp ban đầu.
Theo khai báo của bạn, nếu giả sử solver có chạy thì kết quả không biết có phù hợp ý đồ hay không vì biến trong vùng $F$36:$N$64 ràng buộc chưa được chặt nên chắc sẽ có khá nhiều ô có kết quả =0
Nếu vẫn muốn giải bài này = solver thì bạn viết rõ ý đồ lên rồi tính tiếp
PS: Theo ý đồ của bạn thì khai báo thế này cho gọn
Mã:$F$36:$N$64>=0 $F$65:$N$65<=$F$66:$N$66 $O$36:$O$64<=$P$36:$P$64
P34=SUMPRODUCT(F4:N32;F38:N66) mà. Những ô trong vùng F4:N32 có thể nhận nhiều giá trị khác nhau thỏa điều kiện, nên có nhiều kết quả. Từ đó sẽ có kết quả lớn nhất và nhỏ nhất.với dữ liệu F4:N32 mỗi dòng chỉ có 1 số thì ô P34 chỉ có 1 kết quả duy nhất, làm gì có Max? không chọn mục tiêu là ô P34, mà chọn mục tiêu là tổng diện tích.
vấn đề là phân bổ diện tích thế nào cho tương đối đẹp và thuyết phục
Vậy mục tiêu của mình như vậy, bạn có cách nào khác không?Solver là con toán tính lần lượt. Mỗi lần tính phải có một chút sai số. Sau chừng 100 con tính thì sai số sẽ đạt đến mức mà kết quả khong còn đáng tin cậy.
Vì vậy, trường hợp rắc rối thì khong nên dùng solver.
Tính chất của các loại đất và loại hình sử dụng đất rất khác nhau, không thể gộp được.Solver không phải là công cụ vạn năng, khi các biến quá nhiều và quan hệ giữa các biến phức tạp thì thường không xử lý được, nếu các biến quan hệ theo kiểu "Tuyến tính" thì đa số nó giải được
Qua mỗi vòng lập có thể Solver có một chút sai số, số vòng lập càng lớn thì có thể sai số tăng, trong bài nầy nếu giảm số biến bằng cách gộp các nhóm, loại đất giống nhau lại, và khai báo option thích hợp thì chạy vèo 1 cái là ra kết quả, sau đó phân bổ lại cho từng mã trong nhóm đã gộp
Vùng $F$36:$N$64 mới xác định cận dưới, chưa có cận trên => khi solver chạy, những ô đầu tiên sẽ được chọn sao cho $O$36:$O$64 gần bằng $P$36:$P$64 => những ô còn lại là sẽ có khả năng = 0.Đúng là nhiều ô cho kết quả bằng 0, cài này hợp lý. Cách khai báo của bạn hay mình sẽ thử.
Ý đồ của mình là bố trí số liệu ở $F$36:$N$64 thỏa mãn các điều kiện
$F$36:$N$64>=0
$F$65:$N$65<=$F$66:$N$66
$O$36:$O$64<=$P$36:$P$64
sao cho ô P34 đạt giá trị cao nhất.
Đây là bài toàn tối ưu, có thể giải bằng lingo (dữ liệu >200), nhưng phần mềm này nhập thủ công, dễ sai sót. vì vậy mình mới tìm cách làm bằng excel.
Làm như bài 4 không được sao?Vậy mục tiêu của mình như vậy, bạn có cách nào khác không?
Làm như bài 4 không được sao?
cách của bạn rất hay, ra kết quả giống sử dụng lingo = 4760925. Đây là kết quả mình chạy lingo. Mình thấy bố trí như lingo thì dễ đưa vào thực tiễn hơn. Bạn có thể đổi mô hình tính để ra kết quả gần giống được không? (có vẻ hơi tham 1 chút, hihi)Thay đổi mô hình để giảm số biến, bạn chạy thử solver trong file dưới đây xem sao.
Các ràng buộc có thể bổ sung thêm nếu cần
hôm trước mình gõ sai nên không ra kết quả, nay gõ lại thì ra rồi, kết quả đúng. Cách làm của bạn cũng rất hay, cám ơn bạn nhiều!Làm như bài 4 không được sao?